搜尋
首頁web前端js教程在bootstraptable中使用外掛程式來實現表格的查詢、分頁和排序等操作講解

這篇文章主要介紹了 使用bootstraptable外掛實現表格記錄的查詢、分頁、排序​​操作,需要的朋友可以參考下Bootstrap教程

在業務系統開發中,對錶格記錄的查詢、分頁、排序​​等處理是非常常見的,在Web開發中,可以採用很多功能強大的插件來滿足要求,且能極大的提升開發效率,本隨筆介紹這個bootstrap-table是一款非常有名的開源表格插件,在許多專案中廣泛的應用。 Bootstrap-table插件提供了非常豐富的屬性設置,可實現查詢、分頁、排序​​、複選框、設置顯示列、Card view視圖、主從表顯示、合併列、國際化處理等處理功能,而且該插件同時也提供了一些不錯的擴充功能,如移動行、移動列位置等一些特殊的功能,插件可以用基於HTML5的data-*屬性標識設置,也可以使用Javascript方式進行設置,非常方便。本篇隨筆介紹bootstrap-table插件在我實際專案中的應用情況,總結相關使用中碰到的問題處理經驗。

1、Bootstrap-table資源及使用介紹

Bootstrap-Table顯示資料到表格的方式有兩種,一種是客戶端(client)模式,一種是伺服器(server)模式。

  所謂客戶端模式,指的是在伺服器中把要顯示到表格的資料一次載入出來,然後轉換成JSON格式傳到要顯示的介面中,客戶端模式較為簡單,它是把資料一次載入出來放到介面上,然後根據你設定的每頁記錄數,自動生成分頁。點擊第二頁時,會自動載入出數據,不會再向伺服器發送請求。同時用戶可以使用其自帶的搜尋功能,可以實現全數據搜尋。對於資料量較少的時候,可以使用這個方法。

  所謂伺服器模式,指的是根據設定的每頁記錄數和目前要顯示的頁碼,發送資料到伺服器進行查詢,然後再顯示到表格中。此方法可以根據使用者的需求動態的載入數據,節省了伺服器的資源,但是不能使用其自帶的全數據搜尋功能。

Bootstrap-table是基於Boostrap開發的插件,因此使用的時候,需要引入Bootstrap的腳本和樣式。

如果我們專案中沒有引入相關的文件,則需要引入這些樣式和腳本文件,如下所示。

<link rel="stylesheet" href="bootstrap.min.css" rel="external nofollow" >
<script src="jquery.min.js"></script>
<script src="bootstrap.min.js"></script>

不過以上內容,在我們開發專案的時候都肯定有的了,所以我們還是把中心放到使用這個外掛程式所需的引入檔案上。

CSS檔案引入

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

腳本檔案引入

<script src="bootstrap-table.js"></script>
<--汉化文件,放在 bootstrap-table.js 后面-->
<script src="bootstrap-table-zh-CN.js"></script>

 一般來說我們如果是基於MVC開發的系統,CSS和JS的程式碼,都是放在BundleConfig. cs裡面初始化的,如下所示

bootstrap-table在頁面中的使用,可以分為兩種,一種是純粹用HTML5的寫法,透過data-*的方式指定各種屬性設置,一種是HTML+JS方式實現彈性設定。

如果我們採用HTML5標識的方式初始化HTML程式碼,則是下面的程式碼。

<table data-toggle="table" data-url="data1.json">
 <thead>
  <tr>
   <th data-field="id">Item ID</th>
   <th data-field="name">Item Name</th>
   <th data-field="price">Item Price</th>
  </tr>
 </thead>
</table>

如果我們採用JS程式碼方式來初始化表格插件,那麼只需要在HTML上宣告一個表格物件即可,如下程式碼。

<table id="table"></table>

然後簡單的JS程式碼初始化如下所示

$(&#39;#table&#39;).bootstrapTable({
 url: &#39;data1.json&#39;,
 columns: [{
  field: &#39;id&#39;,
  title: &#39;Item ID&#39;
 }, {
  field: &#39;name&#39;,
  title: &#39;Item Name&#39;
 }, {
  field: &#39;price&#39;,
  title: &#39;Item Price&#39;
 }, ]
});

不過實際上我們使用bootstrap-table的JS配置功能肯定比這個複雜很多,下面介面效果是實際表的資料展示。

2、bootstrap-table的詳細使用

1)整個JS屬性配置

在上圖中,我們是使用JS方式進行初始化表格內容的,JS程式碼如下所示

 var $table;
  //初始化bootstrap-table的内容
  function InitMainTable () {
   //记录页面bootstrap-table全局变量$table,方便应用
   var queryUrl = &#39;/TestUser/FindWithPager?rnd=&#39; + Math.random()
   $table = $(&#39;#grid&#39;).bootstrapTable({
    url: queryUrl,      //请求后台的URL(*)
    method: &#39;GET&#39;,      //请求方式(*)
    //toolbar: &#39;#toolbar&#39;,    //工具按钮用哪个容器
    striped: true,      //是否显示行间隔色
    cache: false,      //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
    pagination: true,     //是否显示分页(*)
    sortable: true,      //是否启用排序
    sortOrder: "asc",     //排序方式
    sidePagination: "server",   //分页方式:client客户端分页,server服务端分页(*)
    pageNumber: 1,      //初始化加载第一页,默认第一页,并记录
    pageSize: rows,      //每页的记录行数(*)
    pageList: [10, 25, 50, 100],  //可供选择的每页的行数(*)
    search: false,      //是否显示表格搜索
    strictSearch: true,
    showColumns: true,     //是否显示所有的列(选择显示的列)
    showRefresh: true,     //是否显示刷新按钮
    minimumCountColumns: 2,    //最少允许的列数
    clickToSelect: true,    //是否启用点击选中行
    //height: 500,      //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
    uniqueId: "ID",      //每一行的唯一标识,一般为主键列
    showToggle: true,     //是否显示详细视图和列表视图的切换按钮
    cardView: false,     //是否显示详细视图
    detailView: false,     //是否显示父子表
    //得到查询的参数
    queryParams : function (params) {
     //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
     var temp = { 
      rows: params.limit,       //页面大小
      page: (params.offset / params.limit) + 1, //页码
      sort: params.sort,  //排序列名 
      sortOrder: params.order //排位命令(desc,asc) 
     };
     return temp;
    },
    columns: [{
     checkbox: true, 
     visible: true     //是否显示复选框 
    }, {
     field: &#39;Name&#39;,
     title: &#39;姓名&#39;,
     sortable: true
    }, {
     field: &#39;Mobile&#39;,
     title: &#39;手机&#39;,
     sortable: true
    }, {
     field: &#39;Email&#39;,
     title: &#39;邮箱&#39;,
     sortable: true,
     formatter: emailFormatter
    }, {
     field: &#39;Homepage&#39;,
     title: &#39;主页&#39;,
     formatter: linkFormatter
    }, {
     field: &#39;Hobby&#39;,
     title: &#39;兴趣爱好&#39;
    }, {
     field: &#39;Gender&#39;,
     title: &#39;性别&#39;,
     sortable: true
    }, {
     field: &#39;Age&#39;,
     title: &#39;年龄&#39;
    }, {
     field: &#39;BirthDate&#39;,
     title: &#39;出生日期&#39;,
     formatter: dateFormatter
    }, {
     field: &#39;Height&#39;,
     title: &#39;身高&#39;
    }, {
     field: &#39;Note&#39;,
     title: &#39;备注&#39;
    }, {
     field:&#39;ID&#39;,
     title: &#39;操作&#39;,
     width: 120,
     align: &#39;center&#39;,
     valign: &#39;middle&#39;,
     formatter: actionFormatter
    }, ],
    onLoadSuccess: function () {
    },
    onLoadError: function () {
     showTips("数据加载失败!");
    },
    onDblClickRow: function (row, $element) {
     var id = row.ID;
     EditViewById(id, &#39;view&#39;);
    },
   });
  };

上面JS程式碼的設定屬性,基本上都加了註解說明,是比較容易理解的了。

2)查詢及分頁

這裡的表格資料分頁是採用伺服器分頁的方式,根據搜尋條件從伺服器傳回資料記錄的,並使用了排序的處理方式,這裡的queryParams參數就是提交到伺服器端的參數了          

 //得到查询的参数
    queryParams : function (params) {
     //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
     var temp = { 
      rows: params.limit,       //页面大小
      page: (params.offset / params.limit) + 1, //页码
      sort: params.sort,  //排序列名 
      sortOrder: params.order //排位命令(desc,asc) 
     };
     return temp;
    },

另外我們看到回傳資料的URL位址介面是FindWithPager,我們來看看這個MVC控制器方法是如何處理資料回傳的。

/// <summary>
  /// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
  /// </summary>
  /// <returns>指定对象的集合</returns>
  public override ActionResult FindWithPager()
  {
   //检查用户是否有权限,否则抛出MyDenyAccessException异常
   base.CheckAuthorized(AuthorizeKey.ListKey);

   string where = GetPagerCondition();
   PagerInfo pagerInfo = GetPagerInfo();
   var sort = GetSortOrder();

   List<TestUserInfo> list = null;
   if (sort != null && !string.IsNullOrEmpty(sort.SortName))
   {
    list = baseBLL.FindWithPager(where, pagerInfo, sort.SortName, sort.IsDesc);
   }
   else
   {
    list = baseBLL.FindWithPager(where, pagerInfo);
   } 

   //Json格式的要求{total:22,rows:{}}
   //构造成Json的格式传递
   var result = new { total = pagerInfo.RecordCount, rows = list };
   return ToJsonContent(result);
  }

上面程式碼處理了兩個部分的物件訊息,一個是分頁實體類別訊息,一個是排序信息,然後根據這些條件獲取記錄,返回類似
{total:22,rows:{ }}

格式的JSON資料記錄。          

var result = new { total = pagerInfo.RecordCount, rows = list };
   return ToJsonContent(result);

取得分頁的參數資訊如下圖      

 /// <summary>
  /// 根据Request参数获取分页对象数据
  /// </summary>
  /// <returns></returns>
  protected virtual PagerInfo GetPagerInfo()
  {
   int pageIndex = Request["page"] == null ? 1 : int.Parse(Request["page"]);
   int pageSize = Request["rows"] == null ? 10 : int.Parse(Request["rows"]);

   PagerInfo pagerInfo = new PagerInfo();
   pagerInfo.CurrenetPageIndex = pageIndex;
   pagerInfo.PageSize = pageSize;
   return pagerInfo;
  }

取得排序參數資訊的程式碼如下所示

 /// <summary>
  /// 获取排序的信息
  /// </summary>
  /// <returns></returns>
  protected SortInfo GetSortOrder()
  {
   var name = Request["sort"];
   var order = Request["sortOrder"];
   return new SortInfo(name, order);
  }

最后就是具体实现具体条件、具体页码、具体排序条件下的数据记录了,这部分可以根据自己的要求实现逻辑,这里只是给出一个封装好的处理调用即可。

baseBLL.FindWithPager(where, pagerInfo, sort.SortName, sort.IsDesc);

实际情况下,我们列表的展示,一般需要使用不同的条件进行数据的查询的,虽然这个Bootstrap-table控件提供了一个默认的查询按钮,不过一般是在客户端分页的情况下使用,而且略显简单,我们一般使用自己查询条件进行处理,如下界面所示。

或者如下的

那么这样对于上面的js属性就需要调整下接受查询条件参数queryParams 了            

 //得到查询的参数
    queryParams : function (params) {
     //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
     var temp = { 
      rows: params.limit,       //页面大小
      page: (params.offset / params.limit) + 1, //页码
      sort: params.sort,  //排序列名 
      sortOrder: params.order //排位命令(desc,asc) 
     };
     return temp;
    },

对于自定义查询条件,我们可以用下面的常规方式增加参数,如下所示

但是查询条件的参数我们不方便一一设置,我们想通过一种较为快捷的方式来处理,那么就需要对这个处理方式进行一个特别的修改了,首先添加一个扩展函数来处理表单的条件

 //自定义函数处理queryParams的批量增加
  $.fn.serializeJsonObject = function () {
   var json = {};
   var form = this.serializeArray();
   $.each(form, function () {
    if (json[this.name]) {
     if (!json[this.name].push) {
      json[this.name] = [json[this.name]];
     }
     json[this.name].push();
    } else {
     json[this.name] = this.value || &#39;&#39;;
    }
   });
   return json;
  }

然后我们就可以批量处理表单的查询条件了        

 queryParams : function (params) {
     //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
     var temp = $("#ffSearch").serializeJsonObject();
     temp["rows"] = params.limit;      //页面大小
     temp["page"] = (params.offset / params.limit) + 1; //页码
     temp["sort"] = params.sort;       //排序列名
     temp["sortOrder"] = params.order;     //排位命令(desc,asc) 

     //特殊格式的条件处理
     temp["WHC_Age"] = $("#WHC_Age").val() + "~" + $("#WHC_Age2").val();
     temp["WHC_BirthDate"] = $("#WHC_BirthDate").val() + "~" + $("#WHC_BirthDate2").val();

     return temp;
    },

然后后端统一按照逻辑处理查询参数即可。

3)格式化输出函数及其他

对于上面JS的配置信息,我们再来回顾一下,例如对于数据转义函数,可以格式化输出的内容的,如下界面代码。

格式化的数据转义函数如下,主要就是根据内容进行格式化输出的JS函数,好像是需要放在一个文件内。

 //连接字段格式化
  function linkFormatter(value, row, index) {    
   return "<a href=&#39;" + value + "&#39; title=&#39;单击打开连接&#39; target=&#39;_blank&#39;>" + value + "</a>";
  }
  //Email字段格式化
  function emailFormatter(value, row, index) {
   return "<a href=&#39;mailto:" + value + "&#39; title=&#39;单击打开连接&#39;>" + value + "</a>";
  }
  //性别字段格式化
  function sexFormatter(value) {
   if (value == "女") { color = &#39;Red&#39;; }
   else if (value == "男") { color = &#39;Green&#39;; }
   else { color = &#39;Yellow&#39;; }

   return &#39;<p style="color: &#39; + color + &#39;">&#39; + value + &#39;</p>&#39;;
  }

另外,我们看到行记录的最后增加了几个操作按钮,方便对当前记录的查看、编辑和删除操作,如下效果图所示。

这部分我们也是通过格式化函数进行处理的

 //操作栏的格式化
  function actionFormatter(value, row, index) {
   var id = value;
   var result = "";
   result += "<a href=&#39;javascript:;&#39; class=&#39;btn btn-xs green&#39; onclick=\"EditViewById(&#39;" + id + "&#39;, view=&#39;view&#39;)\" title=&#39;查看&#39;><span class=&#39;glyphicon glyphicon-search&#39;></span></a>";
   result += "<a href=&#39;javascript:;&#39; class=&#39;btn btn-xs blue&#39; onclick=\"EditViewById(&#39;" + id + "&#39;)\" title=&#39;编辑&#39;><span class=&#39;glyphicon glyphicon-pencil&#39;></span></a>";
   result += "<a href=&#39;javascript:;&#39; class=&#39;btn btn-xs red&#39; onclick=\"DeleteByIds(&#39;" + id + "&#39;)\" title=&#39;删除&#39;><span class=&#39;glyphicon glyphicon-remove&#39;></span></a>";
   return result;
  }

 

如果我们需要双击弹出编辑界面的层,我们可以处理表格的双击事件,如下代码所示。

      onDblClickRow: function (row, $element) {
          var id = row.ID;
          EditViewById(id, &#39;view&#39;);
        },

如果我们需要设置行的不同的样式展示,可以通过增加rowStyle的JS处理函数即可,如下代码所示

       rowStyle: function (row, index) { //设置行的特殊样式
          //这里有5个取值颜色[&#39;active&#39;, &#39;success&#39;, &#39;info&#39;, &#39;warning&#39;, &#39;danger&#39;];
          var strclass = "";
          if (index == 0) {
            strclass = "warning";
          }
          return { classes: strclass }
        }

 对于表格记录的获取,我们可以通过下面的代码进行获取:$table.bootstrapTable('getSelections')

      var rows = $table.bootstrapTable(&#39;getSelections&#39;);
      if (rows.length > 0) {
        ID = rows[0].ID;
      }

如果是多条记录的处理,例如删除记录

    //实现删除数据的方法
    function Delete() {
      var ids = "";//得到用户选择的数据的ID
      var rows = $table.bootstrapTable(&#39;getSelections&#39;);
      for (var i = 0; i < rows.length; i++) {
        ids += rows[i].ID + &#39;,&#39;;
      }
      ids = ids.substring(0, ids.length - 1);
      DeleteByIds(ids);
    }

如果需要设置显示列显示,如下界面所示

以及排序处理

这些需要在JS代码开启相关的属性即可。

还有就是一种CardView的卡片视图格式,如下所示。

另外一种是父子表的展开明细的格式,如下所示

 以上就是bootstrap-table插件在我实际项目中的应用情况,基本上对JS各个属性的使用进行了一些介绍了,具体的应用我们可以参考它的文档,获取对应属性、方法、事件的详细说明,这样我们就可以更加详细的应用这个插件的各种功能了。

以上是在bootstraptable中使用外掛程式來實現表格的查詢、分頁和排序等操作講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

See all articles

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

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器