JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】


Posted in Javascript onMay 10, 2016

Bootstrap Table是轻量级的和功能丰富的以表格的形式显示的数据,支持单选,复选框,排序,分页,显示/隐藏列,固定标题滚动表,响应式设计,Ajax加载JSON数据,点击排序的列,卡片视图等。今天就结合Bootstrap table的父子表和行列调序的用法再来介绍下它稍微高级点的用法。

bootstrap table系列:

一、效果展示

今天稍微改变下方式,先来看看实现效果,后面再介绍代码实现及注意事项。来,效果图来一发:

1、父子表效果图

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

2、行调序

调序前

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

拖动行调序到第一行

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

3、列调序

调序前

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

拖动列标题调序

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

调序后

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

二、父子表代码详解

上章我们介绍Bootstrap table基础用法的时候介绍过,初始化表格的时候有一个属性“detailView”,将它设置为true,在每行的前面即可看到一个“+”形状的图标。点击这个图标即触发加载子表格的事件。大概的原理就是如此,来看看代码,其实也很简单。

1、初始化表格,注册行展开事件

$("#tb_powerset").bootstrapTable({
url: '/api/MenuApi/GetParentMenu',
method: 'get',
detailView: true,//父子表
//sidePagination: "server",
pageSize: 10,
pageList: [10, 25],
columns: [{
field: 'MENU_NAME',
title: '菜单名称'
}, {
field: 'MENU_URL',
title: '菜单URL'
}, {
field: 'PARENT_ID',
title: '父级菜单'
}, {
field: 'MENU_LEVEL',
title: '菜单级别'
}, ],
//注册加载子表的事件。注意下这里的三个参数!
onExpandRow: function (index, row, $detail) {
oInit.InitSubTable(index, row, $detail);
}
});

还是来看看子表加载事件onExpandRow对应方法function (index, row, $detail)的三个参数,

index:父表当前行的行索引。

row:父表当前行的Json数据对象。

$detail:当前行下面创建的新行里面的td对象。

第三个参数尤其重要,因为生成的子表的table在装载在$detail对象里面的。bootstrap table为我们生成了$detail这个对象,然后我们只需要往它里面填充我们想要的table即可。

2、我们来看oInit.InitSubTable()这个方法

//初始化子表格(无线循环)
oInit.InitSubTable = function (index, row, $detail) {
var parentid = row.MENU_ID;
var cur_table = $detail.html('<table></table>').find('table');
$(cur_table).bootstrapTable({
url: '/api/MenuApi/GetChildrenMenu',
method: 'get',
queryParams: { strParentID: parentid },
ajaxOptions: { strParentID: parentid },
clickToSelect: true,
detailView: true,//父子表
uniqueId: "MENU_ID",
pageSize: 10,
pageList: [10, 25],
columns: [{
checkbox: true
}, {
field: 'MENU_NAME',
title: '菜单名称'
}, {
field: 'MENU_URL',
title: '菜单URL'
}, {
field: 'PARENT_ID',
title: '父级菜单'
}, {
field: 'MENU_LEVEL',
title: '菜单级别'
}, ],
//无线循环取子表,直到子表里面没有记录
onExpandRow: function (index, row, $Subdetail) {
oInit.InitSubTable(index, row, $Subdetail);
}
});
};

由此可以看出生成子表的原理就是创建一个table对象cur_table,然后再注册这个对象的表格初始化即可。是不是很简单~~

三、行调序代码详解

行调序的代码就更简单了,来看看。

1、需要额外引用两个js文件

<script src="~/Content/jquery-ui-1.11.4.custom/external/jquery.tablednd.js"></script>
<script src="~/Content/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.js"></script>

2、在cshtml页面定义表格时,添加两个属性

<table id="tb_order" data-use-row-attr-func="true" data-reorderable-rows="true"></table>

然后js表格初始化的时候不需要做任何修改,加载出来的表格即可实现行调序的功能。

四、列调序代码详解

和行调序类似。列调序的使用如下:

1、额外引用几个js和css

<script src="~/Content/bootstrap-table/extensions/reorder-columns/bootstrap-table-reorder-columns.js"></script>
<link rel="stylesheet" href="../assets/examples.css">
<link rel="stylesheet" href="https://rawgit.com/akottr/dragtable/master/dragtable.css">
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://rawgit.com/akottr/dragtable/master/jquery.dragtable.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

2、在cshtml页面定义表格时,添加一个属性

<table id="tb_departments" data-reorderable-columns="true"></table>

其他地方不用做任何修改。加载出来的表格即可实现列调序。有没有很简单。

五、控件过滤

本来这篇准备结束的,突然想起上章里面有一个搜索的功能,好像是服务端分页的时候搜索功能没法使用,于是想起之前再CS里面做过一个类似每个列过滤的功能,博主好奇心又起来了,bootstrap table是否也有这种表格每列过滤的功能,于是查看文档。结果不负所望,还真有~~我们来看看。

1、效果图展示

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

2、代码示例

(1)引入额外js

<script src="~/Content/bootstrap-table/extensions/filter-control/bootstrap-table-filter-control.js"></script>

(2)定义表格属性及表头属性

<table id="tb_roles" data-filter-control="true">
<thead>
<tr>
<th data-field="ROLE_NAME" data-filter-control="select">角色名称</th>
<th data-field="DESCRIPTION" data-filter-control="input">角色描述</th>
<th data-field="ROLE_DEFAULTURL" data-filter-control="input">角色默认页面</th>
</tr>
</thead>
</table>

因为这里定义了表头的属性,所以,js初始化的时候就不用定义列了。

(3)js初始化

$('#tb_roles').bootstrapTable({
url: '/Role/GetRole',
method: 'get',
toolbar: '#toolbar',
striped: true,
cache: false,
striped: true,
pagination: true,
sortable: true,
queryParams: function (param) {
return param;
},
queryParamsType: "limit",
detailView: false,//父子表
sidePagination: "server",
pageSize: 10,
pageList: [10, 25, 50, 100],
search: true,
showColumns: true,
showRefresh: true,
minimumCountColumns: 2,
clickToSelect: true,
});

最开始,博主以为这种搜索只能用户客户端分页的情况,可是经过调试发现并非如此,原来搜索的条件都能通过json传递到服务端。我们来看调试的过程

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

后台接收参数,并反序列化

JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】

这样我们就能将查询的条件很好地传递到后台。很好很强大啊。这样就免去了扩展表格搜索功能的烦恼~~

六、总结

以上就是bootstrap table的一些扩展应用。可能未不全面,还有一些高级用法也没有介绍,比如行、列合并,行列冻结等等。

以上内容是小编给大家介绍的JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】 的相关知识,希望对大家有所帮助!

Javascript 相关文章推荐
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
Mar 18 Javascript
关于锚点跳转及jQuery下相关操作与插件
Oct 01 Javascript
JS.getTextContent(element,preformatted)使用介绍
Sep 21 Javascript
jQuery中removeAttr()方法用法实例
Jan 05 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 Javascript
jQuery的promise与deferred对象在异步回调中的作用
May 03 Javascript
js剪切板应用clipboardData实例解析
May 29 Javascript
Angular 项目实现国际化的方法
Jan 08 Javascript
关于vue中 $emit的用法详解
Apr 12 Javascript
Javascript获取某个月的天数
May 30 Javascript
Vuejs中的watch实例详解(监听者)
Jan 05 Javascript
JS绘图Flot应用图形绘制异常解决方案
Oct 16 Javascript
解决jquery无法找到其他父级子集问题的方法
May 10 #Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
May 10 #Javascript
Bootstrap Fileinput文件上传组件用法详解
May 10 #Javascript
javascript实现的猜数小游戏完整实例代码
May 10 #Javascript
BootStrap文件上传样式超好看【持续更新】
May 10 #Javascript
全国省市二级联动下拉菜单 js版
May 10 #Javascript
js实现的简单图片浮动效果完整实例
May 10 #Javascript
You might like
收藏的一个php小偷的核心程序
2007/04/09 PHP
php AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
php5.3 废弃函数小结
2010/05/16 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
php unset全局变量运用问题的深入解析
2013/06/17 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
python pygame实现2048游戏
2018/11/20 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
会计辞职信范文
2014/01/15 职场文书
创业者是否需要商业计划书?
2014/02/07 职场文书
商场中秋节活动方案
2014/02/07 职场文书
初中英语课后反思
2014/04/25 职场文书
2014年科协工作总结
2014/12/09 职场文书
关于长城的导游词
2015/01/30 职场文书
2019学生会干事辞职信
2019/06/27 职场文书