bootstrap table使用小记

bootstrap table是一个非常不错的,基于bootstrap的插件,它扩展和丰富了bootstrap表格的操作,如格式化表格,表格选择器,表格工具栏,分页等等。

最近基于bootstrap开发一个开台发布系统,就开发过程中,使用bootstap table遇到的一些问题及收获记录如下:

开始使用:

需要在你自己的页面中引入以下样式及脚本:

<link rel="stylesheet" href="bootstrap.min.css">
<link rel="stylesheet" href="bootstrap-table.css">

<script src="jquery.min.js"></script>
<script src="bootstrap.min.js"></script>
<script src="bootstrap-table.js"></script>

https://github.com/wenzhixin/bootstrap-table/

一、Bootstrap table 支持超多列,会自动显示水平滚动条。

我们用bootstrap开发,经常会遇到一个头疼的问题,如果客户要求表格中显示的列较多,无论我们用bootstrap的哪种布局方式,显示效果都不尽人意。Bootstap table很好的协处理了这个问题,使我们能够在不改变原有的布局方式的情况下,很好的处理超多列的问题,而且支持自定义显示列名,效果如下:

使用方式很简单,在一个普通的表格中设置data-toggle="table",就可以在不写JavaScript的情况下启用Bootstrap Table。当然还可以通过脚本的方式触发:

$(‘#table‘).bootstrapTable({
    url: ‘data.json‘
});。是不是很好使呢,只在我们指定的表格中会带入Bootstrap Table的样式,其它未指定的,不会受影响。

二、结合Bootstrap Modal作弹出表格子页面,并获取当前选中的数据后更新到父页面中:

功能说明:

用户点父页面中的某一输入框,系统会弹出一个查询界面,供用户检索选择相关的数据。

页面布局思路:

首先创建一个Modal分部视图:

 1 <!-- Modal -->
 2 <div class="modal fade" role="dialog" aria-labelledby="gridSystemModalLabel" id="gridSystemModal">
 3   <div class="modal-dialog" role="document">
 4     <div class="modal-content">
 5       <div class="modal-header">
 6         <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
 7         <h4 class="modal-title" id="gridSystemModalLabel">xxxx查询</h4>
 8       </div>
 9       <div class="modal-body">
10           <div class="container-fluid" id="fjShipChkList">
11               @Html.Partial("Modal/FjShipChkList")
12           </div>
13       </div>
14       <div class="modal-footer">
15         <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
16         <button type="button" class="btn btn-primary">选择</button>
17       </div>
18     </div><!-- /.modal-content -->
19   </div><!-- /.modal-dialog -->
20 </div><!-- /.modal -->

Modal分布视图:CustomModal

以及我们要显示业务数据的列表分部视图,并被Modal分部视图调用:

 1 <div class="row table-toolbar">
 2     <div class="col-md-12">
 3         <div class="pull-right form-inline">
 4             <div class="form-group">
 5                 <div class="input-group input-medium">
 6                     <input type="text" class="form-control input-search" placeholder="航次" id="fjShipChkList-keyword" name="keyword" value="" />
 7                     <span class="input-group-btn">
 8                         <button class="btn btn-success btn-search" type="button" id="modal-search">搜索</button>
 9                     </span>
10                 </div>
11             </div>
12         </div>
13     </div>
14 </div>
15
16     <table class="table table-striped table-bordered table-hover js-table" data-toggle="table"
17            data-url="data1.json" data-height="299" data-click-to-select="true"
18             data-select-item-name="radioName" id="table-ShipChk">
19         <thead>
20         <tr>
21             <th data-field="state" data-radio="true"></th>
22             <th class="sorting" aria-column="SHIP_NM">船名</th>
23             <th class="sorting" aria-column="SHIP_NM_EN">英文船名</th>
24             <th class="sorting" aria-column="VOY_ID">航次</th>
25             <th class="sorting" aria-column="DOCK_BTH_NM">停靠泊位</th>
26             <th class="sorting" aria-column="ARR_DT">到港时间</th>
27         </tr>
28         </thead>
29         <tbody id="body-fjShipChkList">
30         @if (Model.GetType() != typeof (QUARANTINE_HANDLE_RESULT))
31         {
32             int i = 0;
33             foreach (VOYAGE_DYNM item in Model.PageList)
34             {
35                 <tr class="odd gradeX">
36                     <td class="bs-checkbox"><input data-index="@(i++)" name="radioName" type="radio"></td>
37                     <td>
38                         @Html.DisplayFor(it => item.SHIP_NM)
39                     </td>
40                     <td>
41                         @Html.DisplayFor(it => item.SHIP_NM_EN)
42                     </td>
43                     <td>
44                         @Html.DisplayFor(it => item.VOY_ID)
45                     </td>
46                     <td>
47                         @Html.DisplayFor(it => item.DOCK_BTH_NM)
48                     </td>
49                     <td>
50                         @Html.DisplayFor(it => item.ARR_DT)
51                     </td>
52                 </tr>
53             }
54         }
55         </tbody>
56     </table>

业务数据分部视图

在父页面中调用Modal分部视图:

@Html.Partial("Modal/CustomModal")

引入Modal分部视图的位置最好是与父页面中的顶层元素为兄弟节点,避免Modal调用失败。

需要在启动Modal 弹出层的元素上加上:data-toggle="modal" data-target="#gridSystemModal"就可以启动Modal了。点探索时,用ajax从后台取数据,并返回一个分部视图,返回成功后直接替换原有的业务数据分部视图。

好了,说了这么多都和我们的主角没多大关系,现在言归正传,搬出我们的主角。现在Modal登场了,我们会想,怎么让这个弹出页面和我们的父页面交互数据呢?我采用的方式是Bootstrap Table,原因很简单:Bootstrap Table天生就是用来处理bootstrap table的,功能强悍,使用简单。

首先,在我们的业务数据分部视图中,

 1 <table class="table table-striped table-bordered table-hover js-table" data-toggle="table"
 2            data-url="data1.json" data-height="299" data-click-to-select="true"
 3             data-select-item-name="radioName" id="table-ShipChk">
 4         <thead>
 5         <tr>
 6             <th data-field="state" data-radio="true"></th>
 7             <th class="sorting" aria-column="SHIP_NM">船名</th>
 8             <th class="sorting" aria-column="SHIP_NM_EN">英文船名</th>
 9             <th class="sorting" aria-column="VOY_ID">航次</th>
10             <th class="sorting" aria-column="DOCK_BTH_NM">停靠泊位</th>
11             <th class="sorting" aria-column="ARR_DT">到港时间</th>
12         </tr>
13         </thead>
14         <tbody id="body-fjShipChkList">
15         @if (Model.GetType() != typeof (QUARANTINE_HANDLE_RESULT))
16         {
17             int i = 0;
18             foreach (VOYAGE_DYNM item in Model.PageList)
19             {
20                 <tr class="odd gradeX">
21                     <td class="bs-checkbox"><input data-index="@(i++)" name="radioName" type="radio"></td>
22                     <td>
23                         @Html.DisplayFor(it => item.SHIP_NM)
24                     </td>
25                     <td>
26                         @Html.DisplayFor(it => item.SHIP_NM_EN)
27                     </td>
28                     <td>
29                         @Html.DisplayFor(it => item.VOY_ID)
30                     </td>
31                     <td>
32                         @Html.DisplayFor(it => item.DOCK_BTH_NM)
33                     </td>
34                     <td>
35                         @Html.DisplayFor(it => item.ARR_DT)
36                     </td>
37                 </tr>
38             }
39         }
40         </tbody>
41     </table>

业务数据Table

加入了:data-url="data1.json" data-height="299" data-click-to-select="true"  data-select-item-name="radioName",其中data-select-item-name指明我们的表格是radio方式的,只能选择其中某一行(当然也可以支持多行选择)。然后再按官方文档,上个小菜,一切即将搞定,是该收拾下班了:

 1 $("#gridSystemModal .btn-primary").click(function () {
 2         var selectRow = $("#table-ShipChk").bootstrapTable(‘getSelections‘);
 3
 4         if (selectRow.length < 1) {
 5             selectRow = $table.bootstrapTable(‘getSelections‘);
 6             if (selectRow.length < 1){
 7             alert("请先选择船舶!");
 8             return;
 9         }
10         }
11         $("#SHIP_NAME").val(selectRow[0][1].trim());
12         $("#VOYAGE_NO").val(selectRow[0][3].trim());
13         $("#SHIP_NM_EN").val(selectRow[0][2].trim());
14         $("#DOCK_BTH_NM").val(selectRow[0][4].trim());
15         $("#ARR_DT").val(selectRow[0][5].trim());
16         $("#gridSystemModal").modal(‘hide‘);
17     });

获取选中的数据行

But,意外发生了,就算我把那个选择按钮点破了,也选不中我要的数据。Why???为什么,为什么。。查官方文档,就是一名$("#table-ShipChk").bootstrapTable(‘getSelections‘)搞定的事,为什么在我这就搞不定了,度娘,GG一无所获。用Bootstrap Table的初衷,就是它简单,强大呀,怎么会这样呢,好吧,加班,查查查。。

问题就出在,每次ajax请求数据后,我都是返回一个新的分部视图去替换原有的分部视图,替换后没有把Bootstrap Table启动起来,别人还在睡大觉呢,你怎么‘getSelections’,它都不鸟你。

好吧,在ajax success中补它一刀:$("#table-ShipChk").bootstrapTable();

好了,Bootstrap Table醒了,我可以下班了。

未完,无续。。



时间: 2024-08-27 22:09:54

bootstrap table使用小记的相关文章

bootstrap table 服务器端分页--ashx+ajax

1.准备静态页面 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title></title> 6 <meta charset="utf-8" /> 7 <link rel="

Bootstrap Table Fixed Columns

最近在使用BootStrap 做项目前端,自然也用到了  Bootstrap Table. 推荐大家多去这个http://bootstrap-table.wenzhixin.net.cn/zh-cn/  网站看看,上面有很详细的介绍以及其他扩展功能 下面写下 Fixed Columns(固定列)的使用方法.附件下载地址:http://pan.baidu.com/s/1kUEQTPt 1.引用css文件,js文件(注意引用顺序) <link rel="stylesheet" hre

html5 jquery bootstrap table 直接使用

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <meta name="viewport" content="width=device-w

JS组件系列——表格组件神器:bootstrap table(三:终结篇,最后的干货福利)

前言:前面介绍了两篇关于bootstrap table的基础用法,这章我们继续来看看它比较常用的一些功能,来个终结篇吧,毛爷爷告诉我们做事要有始有终~~bootstrap table这东西要想所有功能覆盖似乎不太现实,博主挑选了一些自认为比较常用的功能在此分享给各位园友.源码也在这篇统一给出.好了,不多说废话,开始我们的干货之旅吧. bootstrap table系列: JS组件系列——表格组件神器:bootstrap table JS组件系列——表格组件神器:bootstrap table(二

Bootstrap table

Bootstrap table: <!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="dist/css/bootstrap.css"> </head> <

新的表格展示利器 Bootstrap Table Ⅱ

    上一篇文章介绍了Bootstrap Table的基本知识点和应用,本文针对上一篇文章中未解决的文件导出问题进行分析,同时介绍BootStrap Table的扩展功能,当行表格数据修改. 1.Bootstrap Bable 全部数据导出分析 在表格导出数据中,发现设置了分页参数,导出的数据仅为表格加载的分页参数数据,于是,针对这样的情况,通过设置分页参数的值,使表格可以加载更多的数据,可达到导出所有数据的功能需求.然而,在实际的实验中,发现此方案存在以下问题: 表格一次加载一千条数据时,网

BootStrap table使用

bootstrap table git address https://github.com/wenzhixin/bootstrap-table 引入文件 <link rel="stylesheet" href="../bower_components/bootstrap/dist/css/bootstrap.min.css"/> <link rel="stylesheet" href="../bower_compon

Bootstrap Table使用分享

版权声明:本文为博主原创文章,未经博主允许不得转载. 最近客户提出需求,想将原有的管理系统,做下优化,通过手机也能很好展现,想到2个方案: a方案:保留原有的页面,新设计一套适合手机的页面,当手机访问时,进入m.zhy.com(手机页面),pc设备访问时,进入www.zhy.com(pc页面) b方案:采用bootstrap框架,替换原有页面,自动适应手机.平板.PC 设备 采用a方案,需要设计一套界面,并且要得重新写适合页面的接口,考虑到时间及成本问题,故项目采用了b方案 一.效果展示 二.B

bootstrap table 实现固定悬浮table 表头并可以水平滚动

在开发项目中,需要将表格头部固定,而且表格大多数情况下是会水平滚动的.项目的css框架是bootstrap 3,故也可以叫做bootstrap table. 需要实现的是:表格头部固定,并且支持水平滚动 html code(source table): <table id="top_fix_table" border="0" cellpadding="4" cellspacing="0" class="tabl