100 lines
3.3 KiB
HTML
100 lines
3.3 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
<title>SlickGrid example: Multi Column Sort</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"/>
|
|
</head>
|
|
<body>
|
|
<table width="100%">
|
|
<tr>
|
|
<td valign="top" width="50%">
|
|
<div id="myGrid" style="width:600px;height:500px;"></div>
|
|
</td>
|
|
<td valign="top">
|
|
<h2>Demonstrates:</h2>
|
|
<ul>
|
|
<li>basic grid with multi-column sort option</li>
|
|
</ul>
|
|
<h2>View Source:</h2>
|
|
<ul>
|
|
<li><A href="https://github.com/mleibman/SlickGrid/blob/gh-pages/examples/example-multi-column-sort.html" target="_sourcewindow"> View the source for this example on Github</a></li>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<script src="../lib/jquery-1.7.min.js"></script>
|
|
<script src="../lib/jquery.event.drag-2.2.js"></script>
|
|
|
|
<script src="../slick.core.js"></script>
|
|
<script src="../slick.grid.js"></script>
|
|
|
|
<script>
|
|
var grid;
|
|
var columns = [
|
|
{ id: "title", name: "Title", field: "title", sortable: true },
|
|
{ id: "duration", name: "Duration", field: "duration", sortable: true, formatter: dayFormatter },
|
|
{ id: "%", name: "% Complete", field: "percentComplete", sortable: true },
|
|
{ id: "start", name: "Start", field: "start", formatter: dateFormatter, sortable: true },
|
|
{ id: "finish", name: "Finish", field: "finish", formatter: dateFormatter, sortable: true },
|
|
{ id: "effort-driven", name: "Effort Driven", field: "effortDriven", sortable: true }
|
|
];
|
|
|
|
function dayFormatter(row, cell, value, columnDef, dataContext) {
|
|
return value + ' days';
|
|
}
|
|
|
|
function dateFormatter(row, cell, value, columnDef, dataContext) {
|
|
return value.getMonth() + '/' + value.getDate() + '/' + value.getFullYear();
|
|
}
|
|
|
|
var options = {
|
|
enableCellNavigation: true,
|
|
enableColumnReorder: false,
|
|
multiColumnSort: true
|
|
};
|
|
|
|
$(function () {
|
|
var MS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
var data = [];
|
|
for (var i = 0; i < 500; i++) {
|
|
var startDate = new Date(new Date("1/1/1980").getTime() + Math.round(Math.random() * 365 * 25) * MS_PER_DAY);
|
|
var endDate = new Date(startDate.getTime() + Math.round(Math.random() * 365) * MS_PER_DAY);
|
|
data[i] = {
|
|
title: "Task " + i,
|
|
duration: Math.round(Math.random() * 30) + 2,
|
|
percentComplete: Math.round(Math.random() * 100),
|
|
start: startDate,
|
|
finish: endDate,
|
|
effortDriven: (i % 5 == 0)
|
|
};
|
|
}
|
|
|
|
grid = new Slick.Grid("#myGrid", data, columns, options);
|
|
|
|
grid.onSort.subscribe(function (e, args) {
|
|
var cols = args.sortCols;
|
|
|
|
data.sort(function (dataRow1, dataRow2) {
|
|
for (var i = 0, l = cols.length; i < l; i++) {
|
|
var field = cols[i].sortCol.field;
|
|
var sign = cols[i].sortAsc ? 1 : -1;
|
|
var value1 = dataRow1[field], value2 = dataRow2[field];
|
|
var result = (value1 == value2 ? 0 : (value1 > value2 ? 1 : -1)) * sign;
|
|
if (result != 0) {
|
|
return result;
|
|
}
|
|
}
|
|
return 0;
|
|
});
|
|
grid.invalidate();
|
|
grid.render();
|
|
});
|
|
})
|
|
</script>
|
|
</body>
|
|
</html>
|