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打造TabPanel效果代码
May 22 Javascript
Iframe 自动适应页面的高度示例代码
Feb 26 Javascript
javascript原型链继承用法实例分析
Jan 28 Javascript
js点击文本框后才加载验证码实例代码
Oct 20 Javascript
基于jQuery实现选取月份插件附源码下载
Dec 28 Javascript
js显示动态时间的方法详解
Aug 20 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
Oct 26 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
Jan 31 jQuery
zTree 树插件实现全国五级地区点击后加载的示例
Feb 05 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
Sep 04 Javascript
vue router 传参获取不到的解决方式
Nov 13 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 01 jQuery
解决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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
JavaScript中的prototype使用说明
2010/04/13 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
jquery map方法使用示例
2014/04/23 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
js序列化和反序列化的使用讲解
2019/01/19 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
Python模块学习 re 正则表达式
2011/05/19 Python
Python装饰器使用示例及实际应用例子
2015/03/06 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
python开发游戏的前期准备
2019/05/05 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
Python模块常用四种安装方式
2020/10/20 Python
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
班级入场式解说词
2014/02/01 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
创先争优一句话承诺
2014/05/29 职场文书
2014年党员加强作风建设思想汇报
2014/09/15 职场文书
2014年超市员工工作总结
2014/11/18 职场文书
施工现场安全管理制度
2015/08/05 职场文书
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python