首頁 web前端 js教程 JS表格組件神器bootstrap table詳解(基礎版)

JS表格組件神器bootstrap table詳解(基礎版)

Jan 04, 2017 pm 01:24 PM

一、Bootstrap Table的引入

關於Bootstrap Table的引入,一般來說還是兩種方法:

1、直接下載源碼,加入項目裡面來。
由於Bootstrap Table是Bootstrap的一個元件,所以它是依賴Bootstrap的,我們首先需要加入Bootstrap的引用。

2、使用我們神奇的Nuget
打開Nuget,搜尋這兩個包

JS表格组件神器bootstrap table详解(基础版)

Bootstrap已經是最新的3.3.5了,我們直接安裝即可。

JS表格组件神器bootstrap table详解(基础版)

而Bootstrap Table的版本竟然是0.4,這也太坑爹了。所以部落客建議Bootstrap Table的套件就直接在原始碼裡面去下載吧。 Bootstrap Table最新的版本好像是1.9.0。

二、程式碼詳解
當然,元件引用進來了,使用就簡單了,只不過這裡面涉及很多細節需要我們處理,具體我們待會再說,先來看看使用方法。
1、在cshtml頁面引用相關元件,並定義好一個空的表格。

@{
 Layout = null;
}
<!DOCTYPE html>
<html>
<head>
 <meta name="viewport" content="width=device-width" />
 <title>BootStrap Table使用</title>
 @*1、Jquery组件引用*@
 <script src="~/Scripts/jquery-1.10.2.js"></script>
 
 @*2、bootstrap组件引用*@
 <script src="~/Content/bootstrap/bootstrap.js"></script>
 <link href="~/Content/bootstrap/bootstrap.css" rel="stylesheet" />
  
 @*3、bootstrap table组件以及中文包的引用*@
 <script src="~/Content/bootstrap-table/bootstrap-table.js"></script>
 <link href="~/Content/bootstrap-table/bootstrap-table.css" rel="stylesheet" />
 <script src="~/Content/bootstrap-table/locale/bootstrap-table-zh-CN.js"></script>
  
 @*4、页面Js文件的引用*@
 <script src="~/Scripts/Home/Index.js"></script>
</head>
<body>
 <div class="panel-body" style="padding-bottom:0px;">
 <div class="panel panel-default">
 <div class="panel-heading">查询条件</div>
 <div class="panel-body">
 <form id="formSearch" class="form-horizontal">
  <div class="form-group" style="margin-top:15px">
  <label class="control-label col-sm-1" for="txt_search_departmentname">部门名称</label>
  <div class="col-sm-3">
  <input type="text" class="form-control" id="txt_search_departmentname">
  </div>
  <label class="control-label col-sm-1" for="txt_search_statu">状态</label>
  <div class="col-sm-3">
  <input type="text" class="form-control" id="txt_search_statu">
  </div>
  <div class="col-sm-4" style="text-align:left;">
  <button type="button" style="margin-left:50px" id="btn_query" class="btn btn-primary">查询</button>
  </div>
  </div>
 </form>
 </div>
 </div> 
 
 <div id="toolbar" class="btn-group">
 <button id="btn_add" type="button" class="btn btn-default">
 <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>新增
 </button>
 <button id="btn_edit" type="button" class="btn btn-default">
 <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
 </button>
 <button id="btn_delete" type="button" class="btn btn-default">
 <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
 </button>
 </div>
 <table id="tb_departments"></table>
 </div>
</body>
</html>
登入後複製

引入需要的檔案之後,我們最重要的就是定義一個空的table,如上的 

  。當然Bootstrap table也提供了一個簡介的用法,直接在table標籤裡面定義類似「data-…」等相關屬性,就不用再js裡面註冊了,但博主覺得這種用法雖然簡單,但不太靈活,遇到這些子等子表等這些高階用法的時候就不太好處理了,所以咱們還是統一使用在js裡面初始化的方式來使用table組件。
2、Js初始化

$(function () {
 
 //1.初始化Table
 var oTable = new TableInit();
 oTable.Init();
 
 //2.初始化Button的点击事件
 var oButtonInit = new ButtonInit();
 oButtonInit.Init();
 
});
 
 
var TableInit = function () {
 var oTableInit = new Object();
 //初始化Table
 oTableInit.Init = function () {
 $(&#39;#tb_departments&#39;).bootstrapTable({
 url: &#39;/Home/GetDepartment&#39;, //请求后台的URL(*)
 method: &#39;get&#39;,  //请求方式(*)
 toolbar: &#39;#toolbar&#39;, //工具按钮用哪个容器
 striped: true,  //是否显示行间隔色
 cache: false,  //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
 pagination: true,  //是否显示分页(*)
 sortable: false,  //是否启用排序
 sortOrder: "asc",  //排序方式
 queryParams: oTableInit.queryParams,//传递参数(*)
 sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
 pageNumber:1,  //初始化加载第一页,默认第一页
 pageSize: 10,  //每页的记录行数(*)
 pageList: [10, 25, 50, 100], //可供选择的每页的行数(*)
 search: true,  //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
 strictSearch: true,
 showColumns: true,  //是否显示所有的列
 showRefresh: true,  //是否显示刷新按钮
 minimumCountColumns: 2, //最少允许的列数
 clickToSelect: true, //是否启用点击选中行
 height: 500,  //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
 uniqueId: "ID",  //每一行的唯一标识,一般为主键列
 showToggle:true,  //是否显示详细视图和列表视图的切换按钮
 cardView: false,  //是否显示详细视图
 detailView: false,  //是否显示父子表
 columns: [{
 checkbox: true
 }, {
 field: &#39;Name&#39;,
 title: &#39;部门名称&#39;
 }, {
 field: &#39;ParentName&#39;,
 title: &#39;上级部门&#39;
 }, {
 field: &#39;Level&#39;,
 title: &#39;部门级别&#39;
 }, {
 field: &#39;Desc&#39;,
 title: &#39;描述&#39;
 }, ]
 });
 };
 
 //得到查询的参数
 oTableInit.queryParams = function (params) {
 var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
 limit: params.limit, //页面大小
 offset: params.offset, //页码
 departmentname: $("#txt_search_departmentname").val(),
 statu: $("#txt_search_statu").val()
 };
 return temp;
 };
 return oTableInit;
};
 
 
var ButtonInit = function () {
 var oInit = new Object();
 var postdata = {};
 
 oInit.Init = function () {
 //初始化页面上面的按钮事件
 };
 
 return oInit;
};
登入後複製

表格的初始化也很簡單,定義相關的參數即可。上面一些部落客覺得重要的參數都加了註釋,並且初始化Table必須的幾個參數博主也用(*)做了標記,如果你的表格也有太多的頁面需求,直接用必須的參數就能解決。同樣,在columns參數裡面其實也有很多的參數需要設置,例如列的排序,對齊,寬度等等。這些部落客覺得比較簡單,不會涉及表格的功能,看看API就能搞定。
3、在Controller裡面對應的方法

public JsonResult GetDepartment(int limit, int offset, string departmentname, string statu)
{
var lstRes = new List<Department>();
for (var i = 0; i < 50; i++)
{
var oModel = new Department();
oModel.ID = Guid.NewGuid().ToString();
oModel.Name = "销售部" + i ;
oModel.Level = i.ToString();
oModel.Desc = "暂无描述信息";
lstRes.Add(oModel);
}
 
var total = lstRes.Count;
var rows = lstRes.Skip(offset).Take(limit).ToList();
return Json(new { total = total, rows = rows }, JsonRequestBehavior.AllowGet);
}
登入後複製

這裡有一點要注意:如果是服務端分頁,回傳的結果必須包含total、rows兩個參數。漏寫或錯寫都會導致表格無法顯示資料。相反,如果是客戶端分頁,這裡要回傳一個集合物件到前端。

4、效果及說明

JS表格组件神器bootstrap table详解(基础版)

還是貼幾張效果圖出來:

JS表格组件神器bootstrap table详解(基础版)

JS表格组件神器bootstrap table详解(基础版)

JS表格组件神器bootstrap table详解(基础版),由於零點

JS表格组件神器bootstrap table详解(基础版)

部落客遇到一個問題可以和園友們分享一下,這應該也是今天這篇想表達的重點。

1、上面說過,如果在js裡面初始化的參數sidePagination: "server" 設定為在服務端分頁,那麼我們的返回值必須告訴前端總記錄的條數和當前頁的記錄數,然後前端才知道如何分頁。而最重要的一點,這兩個參數的名字必須為total和rows。一開始也不知道這個,寫成了total和row,結果是請求可以進到後台的GetDepartment方法,返回值total和row也都有值,可是前端就是顯示如下:

找了好半天原因。原来是row写错了,应该写成rows。可能这也是前天园友遇到的问题的原因。

2、第二个问题就是关于bootstrap页面样式的问题,我们使用过bootstrap的朋友应该知道,它里面所有的图标都是通过class = "glyphicon glyphicon-plus"这种方式去写的。按要求这样做了,可是新增、修改、删除前面的图标怎么都出不来。如下:

JS表格组件神器bootstrap table详解(基础版)

怎么回事呢?然后各种百度,最后发现原来是fonts文件夹的问题。我们在新建一个MVC项目的时候,会自动创建一个fonts文件夹

而我们的bootstrap.css是放在Content文件夹里面的,这样就导致找不到这些样式文件。最终通过谷歌浏览器查看控制台

JS表格组件神器bootstrap table详解(基础版)

原来它自动去Content里面找fonts文件夹了。这下就好办了,把我们的fonts文件夹拷贝到Content下不就行了吗。呵呵,原来真是这样,问题顺利解决。

3、关于中文。刚开始,没有引用 这个包,所以界面找不到记录是显示的是英文,如下:

JS表格组件神器bootstrap table详解(基础版)

后来也是查资料了解到,bootstrap table里面原来还有一个中文包,把它添加进来就好了。

4、第四点要说说表格自带的搜索功能,有上可知,在初始化表格的时候,通过设置search: true可以设置表格的搜索框出现并且可以进行模糊搜索。但是这个时候问题来了,我们采用的是服务端分页,每次返回到前台的只有本页的数据,这个时候我们再搜索的时候发现:搜索不了。这是什么原因呢?博主在谷歌里面调试bootstrap-table.js这个js发现里面有这样一段逻辑:

BootstrapTable.prototype.onSearch = function (event) {
var text = $.trim($(event.currentTarget).val());
 
// trim search input
if (this.options.trimOnSearch && $(event.currentTarget).val() !== text) {
$(event.currentTarget).val(text);
}
 
if (text === this.searchText) {
return;
}
this.searchText = text;
 
this.options.pageNumber = 1;
this.initSearch();
this.updatePagination();
this.trigger(&#39;search&#39;, text);
};
 
BootstrapTable.prototype.initSearch = function () {
var that = this;
 
if (this.options.sidePagination !== &#39;server&#39;) {
var s = this.searchText && this.searchText.toLowerCase();
var f = $.isEmptyObject(this.filterColumns) ? null : this.filterColumns;
 
// Check filter
this.data = f ? $.grep(this.options.data, function (item, i) {
for (var key in f) {
 if (item[key] !== f[key]) {
 return false;
 }
}
return true;
}) : this.options.data;
 
this.data = s ? $.grep(this.data, function (item, i) {
for (var key in item) {
 key = $.isNumeric(key) ? parseInt(key, 10) : key;
 var value = item[key],
 column = that.columns[getFieldIndex(that.columns, key)],
 j = $.inArray(key, that.header.fields);
 
 // Fix #142: search use formated data
 if (column && column.searchFormatter) {
 value = calculateObjectValue(column,
 that.header.formatters[j], [value, item, i], value);
 }
 
 var index = $.inArray(key, that.header.fields);
 if (index !== -1 && that.header.searchables[index] && (typeof value === &#39;string&#39; || typeof value === &#39;number&#39;)) {
 if (that.options.strictSearch) {
 if ((value + &#39;&#39;).toLowerCase() === s) {
 return true;
 }
 } else {
 if ((value + &#39;&#39;).toLowerCase().indexOf(s) !== -1) {
 return true;
 }
 }
 }
}
return false;
}) : this.data;
}
};
登入後複製

在initSearch方法里面,它有一个判断:if (this.options.sidePagination !== 'server') {......}也就是说,如果不是服务端分页,才进入检索,重写加载表格,否则压根就不会进入检索,这也就是为什么服务分页的时候,搜索会不起作用。博主试了下,换成客户端分页,确实可以搜索。呵呵,原来如此。其实这也很好里面,过滤本页的数据,意义不大。
5、关于Bootstrap Table的排序,由于一般这种BS系统肯定会采用服务端分页,我们如果仅仅在js里面设置sortable和sortOrder等属性信息,表格是不会有效排序的。原因很简单,服务端分页的方式,排序本页数据意义不大。所以,一般的排序需要将排序方式和排序字段发送到后台,在后台排序比较合适。比如我们这里可以再参数里面增加两个:

oTableInit.queryParams = function (params) {
 var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
 limit: params.limit, //页面大小
 offset: params.offset, //页码
 order: params.order,
 ordername: params.sort,
 departmentname: $("#txt_search_departmentname").val(),
 statu: $("#txt_search_statu").val()
 };
 return temp;
 };
登入後複製

五、总结
在开发经历中,也使用Jqgrid、EasyUI等表格组件。相比而言,bootstrap Table有自己的优势:

1、界面采用扁平化的风格,用户体验比较好,更好兼容各种客户端。这点也是最重要的。

2、开源、免费。国人最喜欢的就是免费了。呵呵。

3、相对Jqgrid、easyUI而言,比较轻量级。功能不能说最全面,但基本够用。

更多JS表格组件神器bootstrap table详解(基础版)相关文章请关注PHP中文网!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何創建和發布自己的JavaScript庫? 如何創建和發布自己的JavaScript庫? Mar 18, 2025 pm 03:12 PM

文章討論了創建,發布和維護JavaScript庫,專注於計劃,開發,測試,文檔和促銷策略。

如何在瀏覽器中優化JavaScript代碼以進行性能? 如何在瀏覽器中優化JavaScript代碼以進行性能? Mar 18, 2025 pm 03:14 PM

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

前端熱敏紙小票打印遇到亂碼問題怎麼辦? 前端熱敏紙小票打印遇到亂碼問題怎麼辦? Apr 04, 2025 pm 02:42 PM

前端熱敏紙小票打印的常見問題與解決方案在前端開發中,小票打印是一個常見的需求。然而,很多開發者在實...

如何使用瀏覽器開發人員工具有效調試JavaScript代碼? 如何使用瀏覽器開發人員工具有效調試JavaScript代碼? Mar 18, 2025 pm 03:16 PM

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

如何使用源地圖調試縮小JavaScript代碼? 如何使用源地圖調試縮小JavaScript代碼? Mar 18, 2025 pm 03:17 PM

本文說明瞭如何使用源地圖通過將其映射回原始代碼來調試JAVASCRIPT。它討論了啟用源地圖,設置斷點以及使用Chrome DevTools和WebPack之類的工具。

誰得到更多的Python或JavaScript? 誰得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

開始使用Chart.js:PIE,DONUT和BUBBLE圖表 開始使用Chart.js:PIE,DONUT和BUBBLE圖表 Mar 15, 2025 am 09:19 AM

本教程將介紹如何使用 Chart.js 創建餅圖、環形圖和氣泡圖。此前,我們已學習了 Chart.js 的四種圖表類型:折線圖和條形圖(教程二),以及雷達圖和極地區域圖(教程三)。 創建餅圖和環形圖 餅圖和環形圖非常適合展示某個整體被劃分為不同部分的比例。例如,可以使用餅圖展示野生動物園中雄獅、雌獅和幼獅的百分比,或不同候選人在選舉中獲得的投票百分比。 餅圖僅適用於比較單個參數或數據集。需要注意的是,餅圖無法繪製值為零的實體,因為餅圖中扇形的角度取決於數據點的數值大小。這意味著任何占比為零的實體

console.log輸出結果差異:兩次調用為何不同? console.log輸出結果差異:兩次調用為何不同? Apr 04, 2025 pm 05:12 PM

深入探討console.log輸出差異的根源本文將分析一段代碼中console.log函數輸出結果的差異,並解釋其背後的原因。 �...

See all articles