SlickGrid 是一个JavaScript编写的数据控件,其采用数据虚拟显示的特性备受后来的Grid推崇,如ExtJS DataGrid,其架构设计优秀,UI交互功能非常丰富,插件化的可扩展功能开发非常值得Web开发人员学习
SlickGrid简单介绍 : https://github.com/mleibman/SlickGrid/wiki
快速入门 : https://github.com/mleibman/SlickGrid/wiki/Getting-Started
使用示例 : https://github.com/mleibman/SlickGrid/wiki/Examples
API文档: https://github.com/mleibman/SlickGrid/wiki/API-Reference
处理选择模式: https://github.com/mleibman/SlickGrid/wiki/Handling-selection
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SlickGrid example 1: Basic grid</title>
<link rel="stylesheet" href="./css/slick.grid-2.1.0.css" type="text/css" />
<link rel="stylesheet" href="./css/jquery-ui-1.8.16.custom.css" type="text/css" />
<!-- <link rel="stylesheet" href="../css/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 minimal configuration</li>
</ul>
</td>
</tr>
</table>
<script src="./js/jquery-2.1.1.min.js"></script>
<script src="./js/jquery.event.drag-2.2.js"></script>
<script src="./js/slick.core.js"></script>
<script src="./js/slick.grid-2.1.0.js"></script>
<script type="text/javascript">
var grid;//定义表格
//设置列,name为表头显示名称,field为对应域的名字
var columns = [
{id: "title", name: "标题", field: "title"},
{id: "duration", name: "Duration", field: "duration"},
{id: "%", name: "% Complete", field: "percentComplete"},
{id: "start", name: "Start", field: "start"},
{id: "finish", name: "Finish", field: "finish"},
{id: "effort-driven", name: "Effort Driven", field: "effortDriven"}
];
//设置表格参数
var options = {
enableCellNavigation: true,
enableColumnReorder: false
};
//定义表格数据变量
var data = [];
$(function () {
//生成表格数据
for (var i = 0; i < 100; i++) {
data[i] = {
title: "Task " + i,
duration: "5 days",
percentComplete: Math.round(Math.random() * 100),
start: "01/01/2012",
finish: "01/05/2012",
effortDriven: (i % 5 == 0)
};
}
//创建grid,“myGrid”为表格生成位置的ID
grid = new Slick.Grid("#myGrid", data, columns, options);
});
//定时刷新表格数据
setInterval(function(){
var rows = Math.round(Math.random() * 100);
data = [];
for (var i = 0; i < rows; i++) {
data[i] = {
title: "Task " + i,
duration: "5 days",
percentComplete: Math.round(Math.random() * 100),
start: "01/01/2012",
finish: "01/05/2012",
effortDriven: (i % 5 == 0)
};
}
//重新渲染表格
grid.setData(data);
grid.updateRowCount();
grid.render();
},5000);
</script>
</body>
</html>
slickgrid还有许多扩展性的插件功能
//在初始化列字段时候定义
var columnsProduct = [
{ id: "id", name: "产品编号", field:"ID"},
{ id: "ProductName", name:"产品名称", field:"ProductName",editor:Slick.Editors.TextButton },
{ id: "UnitPrice", name:"单价", field:"UnitPrice",editor: Slick.Editors.Text },
{ id: "IsLuxury", name:"奢侈品?", field:"IsLuxury",editor:Slick.Editors.Checkbox, formatter:Slick.Formatters.Checkmark },
{ id: "ModifiedDate", name:"修改日期", field:"ModifiedDate", fieldType: "datetime", editor: Slick.Editors.Date },
{ id: "Notes", name:"备注", field:"Notes", editor: Slick.Editors.LongText}
];
2 添加div等控件 Editors、formatter
//columns中加editor: Slick.Editors.Text 或者 加formatter:colFormatter
//字体描色
functioncolFormatter(row, cell, value, columnDef, dataContext) {
if(dataContext.iscol == true&& value!="") {
return"<div style='color:red; font-weight:bold;'>"+ value +"</div>";
}
else
returnvalue;
}
//或者 加
//formatter:colFormatter
//字体描色
functioncolFormatter(row, cell, value, columnDef, dataContext) {
if(dataContext.iscol == true&& value!="") {
return"<div style='color:red; font-weight:bold;'>"+ value +"</div>";
}
else
returnvalue;
}
3. 分页控件 pager
var rmtPageInfo = {};
rmtPageInfo.pageNum = 0;
rmtPageInfo.pageSize = 100;
rmtPageInfo.totalRowsCount =10000; //先默认,后服务端计算返回
rmtPageInfo.totalPagesCount = 20; //先默认,后服务端计算返回
//注册分页控件
var pager = newSlick.Controls.PagerSvr(dataViewProduct, gridProduct, rmtPageInfo, $("#myPagerProduct"));
pager.onDataPaged.subscribe(onDataPagedEvent);