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 相关文章推荐
利用jQuary实现文字浮动提示效果示例代码
Dec 26 Javascript
一个JS函数搞定网页标题(title)闪动效果
May 13 Javascript
node.js中的fs.exists方法使用说明
Dec 17 Javascript
使用javascript获取页面名称
Dec 23 Javascript
全系IE支持Bootstrap的解决方法
Oct 19 Javascript
详解Bootstrap插件
Apr 25 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
Jun 06 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
Dec 20 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
Mar 02 Javascript
微信小程序之裁剪图片成圆形的实现代码
Oct 11 Javascript
vue 移动端适配方案详解
Nov 15 Javascript
Angular CLI发布路径的配置项浅析
Mar 29 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个人网站架设连环讲(四)
2006/10/09 PHP
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
php算法实例分享
2015/07/14 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
2014/12/29 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
python 格式化输出百分号的方法
2019/01/20 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
Python 在函数上添加包装器
2020/07/28 Python
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
大三预备党员入党思想汇报
2014/01/08 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
2014年妇女工作总结
2014/12/06 职场文书
劳保用品管理制度范本
2015/08/06 职场文书