150 lines
4.1 KiB
HTML
150 lines
4.1 KiB
HTML
|
<!DOCTYPE HTML>
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||
|
<title>SlickGrid example 3a: Advanced Editing</title>
|
||
|
<link rel="stylesheet" href="../slick.grid.css" type="text/css"/>
|
||
|
<link rel="stylesheet" href="../css/smoothness/jquery-ui-1.8.16.custom.css" type="text/css"/>
|
||
|
<link rel="stylesheet" href="examples.css" type="text/css"/>
|
||
|
<style>
|
||
|
.cell-title {
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
</style>
|
||
|
</head>
|
||
|
<body>
|
||
|
|
||
|
<div style="position:relative">
|
||
|
<div style="width:600px;">
|
||
|
<div id="myGrid" style="width:100%;height:500px;"></div>
|
||
|
</div>
|
||
|
|
||
|
<div class="options-panel">
|
||
|
<h2>Demonstrates:</h2>
|
||
|
<ul>
|
||
|
<li>compound cell editors driving multiple fields from one cell</li>
|
||
|
<li>providing validation from the editor</li>
|
||
|
<li>hooking into validation events</li>
|
||
|
</ul>
|
||
|
<h2>View Source:</h2>
|
||
|
<ul>
|
||
|
<li><A href="https://github.com/mleibman/SlickGrid/blob/gh-pages/examples/example3a-compound-editors.html" target="_sourcewindow"> View the source for this example on Github</a></li>
|
||
|
</ul>
|
||
|
|
||
|
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<script src="../lib/firebugx.js"></script>
|
||
|
|
||
|
<script src="../lib/jquery-1.7.min.js"></script>
|
||
|
<script src="../lib/jquery-ui-1.8.16.custom.min.js"></script>
|
||
|
<script src="../lib/jquery.event.drag-2.2.js"></script>
|
||
|
|
||
|
<script src="../slick.core.js"></script>
|
||
|
<script src="../slick.editors.js"></script>
|
||
|
<script src="../slick.grid.js"></script>
|
||
|
|
||
|
<script>
|
||
|
var grid;
|
||
|
var data = [];
|
||
|
var columns = [
|
||
|
{id: "title", name: "Title", field: "title", width: 120, cssClass: "cell-title", editor: Slick.Editors.Text},
|
||
|
{id: "range", name: "Range", width: 120, formatter: NumericRangeFormatter, editor: NumericRangeEditor}
|
||
|
];
|
||
|
|
||
|
var options = {
|
||
|
editable: true,
|
||
|
enableAddRow: false,
|
||
|
enableCellNavigation: true,
|
||
|
asyncEditorLoading: false
|
||
|
};
|
||
|
|
||
|
function NumericRangeFormatter(row, cell, value, columnDef, dataContext) {
|
||
|
return dataContext.from + " - " + dataContext.to;
|
||
|
}
|
||
|
|
||
|
function NumericRangeEditor(args) {
|
||
|
var $from, $to;
|
||
|
var scope = this;
|
||
|
|
||
|
this.init = function () {
|
||
|
$from = $("<INPUT type=text style='width:40px' />")
|
||
|
.appendTo(args.container)
|
||
|
.bind("keydown", scope.handleKeyDown);
|
||
|
|
||
|
$(args.container).append(" to ");
|
||
|
|
||
|
$to = $("<INPUT type=text style='width:40px' />")
|
||
|
.appendTo(args.container)
|
||
|
.bind("keydown", scope.handleKeyDown);
|
||
|
|
||
|
scope.focus();
|
||
|
};
|
||
|
|
||
|
this.handleKeyDown = function (e) {
|
||
|
if (e.keyCode == $.ui.keyCode.LEFT || e.keyCode == $.ui.keyCode.RIGHT || e.keyCode == $.ui.keyCode.TAB) {
|
||
|
e.stopImmediatePropagation();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
this.destroy = function () {
|
||
|
$(args.container).empty();
|
||
|
};
|
||
|
|
||
|
this.focus = function () {
|
||
|
$from.focus();
|
||
|
};
|
||
|
|
||
|
this.serializeValue = function () {
|
||
|
return {from: parseInt($from.val(), 10), to: parseInt($to.val(), 10)};
|
||
|
};
|
||
|
|
||
|
this.applyValue = function (item, state) {
|
||
|
item.from = state.from;
|
||
|
item.to = state.to;
|
||
|
};
|
||
|
|
||
|
this.loadValue = function (item) {
|
||
|
$from.val(item.from);
|
||
|
$to.val(item.to);
|
||
|
};
|
||
|
|
||
|
this.isValueChanged = function () {
|
||
|
return args.item.from != parseInt($from.val(), 10) || args.item.to != parseInt($from.val(), 10);
|
||
|
};
|
||
|
|
||
|
this.validate = function () {
|
||
|
if (isNaN(parseInt($from.val(), 10)) || isNaN(parseInt($to.val(), 10))) {
|
||
|
return {valid: false, msg: "Please type in valid numbers."};
|
||
|
}
|
||
|
|
||
|
if (parseInt($from.val(), 10) > parseInt($to.val(), 10)) {
|
||
|
return {valid: false, msg: "'from' cannot be greater than 'to'"};
|
||
|
}
|
||
|
|
||
|
return {valid: true, msg: null};
|
||
|
};
|
||
|
|
||
|
this.init();
|
||
|
}
|
||
|
|
||
|
$(function () {
|
||
|
for (var i = 0; i < 500; i++) {
|
||
|
var d = (data[i] = {});
|
||
|
|
||
|
d["title"] = "Task " + i;
|
||
|
d["from"] = Math.round(Math.random() * 100);
|
||
|
d["to"] = d["from"] + Math.round(Math.random() * 100);
|
||
|
}
|
||
|
|
||
|
grid = new Slick.Grid("#myGrid", data, columns, options);
|
||
|
|
||
|
grid.onValidationError.subscribe(function (e, args) {
|
||
|
alert(args.validationResults.msg);
|
||
|
});
|
||
|
})
|
||
|
</script>
|
||
|
</body>
|
||
|
</html>
|