datatables.js 简单使用--多选框和服务器端分页
说明:datatables是一款jQuery表格插件。感觉EasyUI的datagrid更易用
内容:多选框和服务器端分页
缘由:写这篇博客的原因是datatables的文档写的不怎么样,找东西很麻烦
环境:asp.net mvc , vs2015+sqlserver2012
显示效果:

代码:
html部分:
<table id="tbUserList" class="table table-bordered table-hover">
<thead class="text-center ">
<tr>
<th>
<input type="checkbox" class="checkall" />
</th>
<th>ID</th>
<th>菜单名称</th>
<th>菜单路径</th>
<th>排序</th>
<th>添加日期</th>
</tr>
</thead> <tfoot class="text-center ">
<tr>
<th>
<input type="checkbox" class="checkall" />
</th>
<th>ID</th>
<th>菜单名称</th>
<th>菜单路径</th>
<th>排序</th>
<th>添加日期</th>
</tr>
</tfoot>
</table>
JS部分:
$(function () {
var _dataTables = $('#tbUserList').DataTable({
"lengthChange": false,
"searching": false,
"ordering": true,
"info": true,
"autoWidth": false,
"pageLength": 10,
"serverSide": true,
"ajax": {
"url": "/BasicManage/GetMenus",
"type":"POST"
},
"columns": [
{
"sClass": "text-center",
"data": "ID",
"render": function (data, type, full, meta) {
return '<input type="checkbox" class="checkchild" value="' + data + '" />';
},
"bSortable": false
},
{ "data": "ID" },
{ "data": "Name" },
{ "data": "MenuPage" },
{ "data": "SortNo" },
{ "data": "AddDateStr" }
]
});
JS部分简单说明:
"serverSide": true启动服务器端分页
"pageLength": 10 每页10条记录,注意pageLength注意大小写,对应的值一定要是数字,,因为datatables的js里没有对这项类型转换,写成字符串会出问题。
看下面的源码

"ajax": 这个就不用说了,去哪取数据
”columns“: 这个的文档在这里 http://datatables.net/reference/option/columns
里面{}的顺序对应表格中列的位置。
”data“:对应的是后台传过来数据的key
重点说第一个{},是用来在第一列加一列多选框的。
”sClass“:"text-center" 设置的class名,多选框会居中显示,可以去datatables的css里搜索这个class名看具体设置
"data": "ID" 这是要用到的数据,我把checkbox的value设置为ID,这样方便取值
”render“ 这里就是要显示的checkbox多选框了
如何实现全选:
注意这里用prop
$(".checkall").click(function () {
var check = $(this).prop("checked");
$(".checkchild").prop("checked", check);
});
获取选中的某一个checkbox的值
if ($(".checkchild:checked").length > 1)
{
alert("一次只能修改一条数据");
return;
}
var id = $(".checkchild:checked").val();
服务器后端如何传数据:
public JsonResult GetMenus()
{
int draw = Convert.ToInt32(Request["draw"]);
int start = Convert.ToInt32(Request["start"]);
int length = Convert.ToInt32(Request["length"]);
int totalCount = 0;
MenuDAO Dao = new MenuDAO();
var menus = Dao.GetMvcMenus((start/length)+1, length, out totalCount);
return Json(new { draw= draw, recordsTotal= totalCount, recordsFiltered= totalCount, data = menus }, JsonRequestBehavior.AllowGet);
}
说明: 前端会向后台传一些数据
draw:这个不用关心,直接给它返回去就好了,注意要变成int类型
start: 从第几条记录开始,从0开始计数,如果你每页设置10条记录,第一页传0,第二页传10,类推
length: 每页的记录条数,对应的前端js设置的pageLength。
返回json :Json(new { draw= draw, recordsTotal= totalCount, recordsFiltered= totalCount, data = menus }, JsonRequestBehavior.AllowGet);
recordsTotal,recordsFiltered这两个都填总记录数就行了,data里就是实际的数据
menus是一个 IEnumerable<Menu>集合
Menu menu = new Menu();
return menu.Select().Where().And("MenuType", "mvc").ExecPageDataTable("ORDER BY ParentID",row,pageSize,out totalCount,Db
.AsEnumerable().Select(d =>
new Menu
{
ID = d.Field<int>("ID"),
Name = d.Field<string>("Name"),
MenuPage = d.Field<string>("MenuPage"),
IconUrl = d.Field<string>("IconUrl"),
SortNo = d.Field<double?>("SortNo"),
Remark = d.Field<string>("Remark"),
ParentID = d.Field<int?>("ParentID"),
AddDateStr = d.Field<DateTime?>("AddDate").ToString()
});
题外话:在sqlserver2012上写分页sql非常简单,据说性能也有提升(没测试过)
Select * from 某表 ORDER BY 某些列 OFFSET (@row-1)*@pageSize ROWS FETCH NEXT @pageSize ROWS ONLY
替换相应参数 @row 取第几页, @pageSize 取多少条
datatables.js 简单使用--多选框和服务器端分页的更多相关文章
- js获取checkbox复选框获取选中的选项
js获取checkbox复选框获取选中的选项 分享下javascript获取checkbox 复选框获取选中的选项的方法. 有关javascript 获取checkbox复选框的实例数不胜数.js实现 ...
- js操作checkbox(复选框)的方法总结
收集了一些用js代码操作checkbox复选框的代码,分享出来,供需要的朋友参考: <script> //复选框checkbox 处理方法 //搜集整理 www.jbxue.com fun ...
- Js动态添加复选框Checkbox
Js动态添加复选框Checkbox的实例方法!!! 首先,使用JS动态产生Checkbox可以采用如下类似的语句: var checkBox=document.createElement(" ...
- js进阶 9-15 多选框如何限制选中数目
js进阶 9-15 多选框如何限制选中数目 一.总结 一句话总结: 1.多选框如何限制选中数目? 没点击选择一次,来统计现在总共选了多少个,如果超出,就给onclick事件返回false,取消oncl ...
- datatables.js 简单使用--弹出编辑框或添加数据框
内容:选中某一条记录,弹出编辑框 环境:asp.net mvc , bootstrap 显示效果: 代码: 至于怎么弄多选框,在上一篇博客里已经有说明. 主要用到了bootstrap的模态窗,下面代 ...
- 简单的多选框选择功能js代码
最近没事写了个特别基础的多选框功能代码,代码如下:js部分: //获取所有class为checkbox的多选按钮(需要以下功能需要先写出对应功能的元素). var checkBoxList = doc ...
- js自定义修改复选框单选框样式,清除复选框单选框默认样式
之前做项目的时候,也遇到过需要按照设计稿把<input type="checkbox">和<input type="radio">的默认 ...
- 用js判断一个复选框是否被选中
<html> <head> <title> 复选框全选.全不选.反选.必选一个 </title> ...
- js实现多级复选框的交互
功能介绍 整个复选框是包含多级,可能有父级,可能有子级,在勾选复选框时,要做两种判断: 1要判断它下面有没有子级,有子级将子级的选中状态checked变得和自己一样. 2要判断它是否有父级,有父级 ...
随机推荐
- android开源项目和框架
特效: http://www.androidviews.net/ http://www.theultimateandroidlibrary.com/ 常用效果: 1. https://github.c ...
- S2SH框架的集成
S2SH框架的集成 20131130 代码下载 : 链接: http://pan.baidu.com/s/1sz6cQ 密码: 513t 这一个星期的时间里,学习SSH框架技术,首先因为之前的项目用到 ...
- 如何编写一个PHP的C扩展
为什么要用C扩展 C是静态编译的,执行效率比PHP代码高很多.同样的运算代码,使用C来开发,性能会比PHP要提升数百倍.IO操作如CURL,因为耗时主要在IOWait上,C扩展没有明显优势. 另外C扩 ...
- 【VerySky原创】如何查找SNRO编号范围的使用情况;
SAP所有编号范围的对象都可以在表NRIV中找到:
- 漫谈Puppet4
激动人心的改进 速度,速度,还是速度 稳定性和鲁棒性的提升 全新的Parser “不变"的agent 不兼容的改动 包管理方式的变化 配置文件/目录的路径变化 其他路径变化 Director ...
- 每日英语:A Different Color: China's Chameleonic Politics
China has tried your form of government and found it wanting. That was the message delivered by Chin ...
- 【转】重新封装FetchUrl函数一枚,支持COOKIES,喜欢领走~!
mjj520 发表于 2012-6-2 09:14 唉 cpu超级耗芸豆的 查了下开发文档,fetchurl原来是不算CPU的,是我误导了大家. 发表于 2012-6-1 17:30:17 |只看该 ...
- 怎么删除github上的仓库
1.到你的个人中心.点击你的个人账号.下图的红色部分 2.点击repositories(仓库),选择你要删除的项目 3.code这一行导航栏 最后的一个. setting 4.下拉页面到最下面 Del ...
- Homebrew
Homebrew官网:http://brew.sh Homebrew installs the stuff you need that Apple didn't Homebrew的安装非常简单,打开终 ...
- struts2:数据校验,通过Action中的validate()方法实现校验(续:多业务方法时的不同验证处理)
前文:struts2:数据校验,通过Action中的validate()方法实现校验,图解 如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑可能需要不同的校验规则,在这种情况下,就需要通 ...