說明:jqgrid動態多表主要是一級頭(欄目)動態和二級表頭(欄目1、2、3、4、5...)動態
圖例
1:數據源是一個dataTable,拿到數據進行列明循環綁定,此處為二級表頭

1 //二級表頭 2 var names = []; //顯示列名 3 var model = []; //綁定列名 4 var num = 1; //設定num主要是區分前幾列固定不需要動態,可以單獨設置一些不同的屬性,如寬度、固定列等 5 //此處因為數據源數組中的結構相同且不為空,直接遍歷索引為0的數據即可 data1.RptResultInfo.Result 是后台傳過來的DataTable 6 $.each(data1.RptResultInfo.Result[0], function (key, value) { 7 if (num == 1) { 8 names.push("No"); 9 model.push({ 10 name: key, 11 index: key, 12 align: "center", 13 sortable: false, 14 frozen: true, 15 width: 50 16 }); 17 } else if (num == 2) { 18 names.push(key); 19 model.push({ 20 name: key, 21 index: key, 22 align: "center", 23 sortable: false, 24 frozen: true, 25 width: 150 26 }); 27 } else { 28 names.push(key); 29 model.push({ 30 name: key, 31 index: key, 32 align: "left", 33 sortable: false, 34 width: 100 35 }); 36 } 37 num++; 38 }) 39 40 jQuery("#j_tableList").jqGrid({ 41 colNames: names, 42 colModel: model, 43 rowNum: 500, 44 footerrow: true, 45 pager: '#pager', 46 mtype: "post"//向后台請求數據的ajax的類型 可選post,get 47 }); 48 //滑動時凍結列設置 49 $('#j_tableList').jqGrid('setFrozenColumns');
2:此處為一級表頭,numberOfColumns:5是因為我的這個已經固定了每個5列,如果二級表是動態數量的話,可以在后台算好,傳一個LIst<T>類型對numberOfColumns屬性賦值即可。

1 //一級表頭 2 var topname = []; 3 //data1.lms 是后台傳過來的一個List<string>類型的一級表頭 4 $.each(data1.lms, function (key, value) { 5 topname.push({ 6 startColumnName: value + "1", //從哪一列開始綁定 7 numberOfColumns: 5,//合並5列 8 titleText: value //顯示值 9 }); 10 }) 11 $("#j_tableList").jqGrid('setGroupHeaders', {//多表頭 12 useColSpanStyle: true, 13 groupHeaders: topname 14 });
說明一下,一二級多表頭關聯時,一級表頭是通過startColumnName屬性來關聯上二級表頭
附帶效果圖:
sql:可以自行百度列轉行
jqgrid:
后台拼數據可以先把類目名稱提取出來,再把門店名稱進行和類目名稱合並成一行,統一傳回前台即可。
此查詢為ajax進行查詢,每次查詢之前,需要進行表格的清空,因為jqgrid拿 到數據是填充到html上的,所以需要進行清空html再進行綁定值

1 //清空表格 2 $("#table-box").html(""); 3 var jqstr = ' <table id="j_tableList" class="table table-striped"></table><div class="pagination-wrap text-center" id="Pagination" style="display:none;"></div>'; 4 $("#table-box").html(jqstr);