爲 datagrid 加載數據分兩種狀況:javascript
不管採起哪種方式,一般建議將 datagrid 的定義(Init)和加載(Load)分做兩個方法來撰寫。
如下總結一下使用 Ajax 方法加載 datagrid 的使用過程。css
這種方式沒有 Ajax 異步請求,數據是來自於其餘控件或者是在本地自行組織。java
<!-- 單頁面樣式 --> <style type="text/css"> /* 當標籤文本過長時,可靈活調整寬度 */ .SearchForm .grid_1 { width: 18.333%; } .SearchForm .grid_2 { width: auto !important; } #maintainForm .grid_2 { /*width: 12.333%;*/ } </style>
<div id="rationPackageExceedDatagrid"></div> <div id="rationPackageExceedDatagridToolbar" class="ToolbarArea "> <!-- 操做區 按鈕 --> <%--<div class="OperationRow">--%> <table cellpadding="0" cellspacing="0" style="width: auto;"> <tr> <td> <%--<a id="btnAddEditDatagrid" href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-add',plain:false">添加</a>--%> </td> <td> <%--<div class="dialog-tool-separator"></div>--%> </td> </tr> </table> <%--</div>--%> <!-- 查詢區 表單 --> <div class="container_12 SearchRow"> <form id="rationPackageExceedDatagridSearchForm" class="SearchForm" method="get"> <%--<div class="clear" title="換行標記"></div>--%> <div class="grid_1 label">總超出額:</div> <div class="grid_2 value"> <span id="lblRationExcessAmounts_rationPackageExceedDatagridSearchForm">¥0.00</span> </div> </form> </div> </div>
這裏包含一個 datagrid 和一個與之配套的 toolbar。ajax
能夠注意,這個函數是以 Init- 打頭。數組
function InitRationPackageExceedDatagrid() { $rationPackageExceedDatagrid.datagrid({ title: '', fit: true, fitColumns: false, // 設置列固定寬度,true值表示自動填滿整個橫向空間 toolbar: "#rationPackageExceedDatagridToolbar", idField: 'projectPartId', frozenColumns: [[{ field: 'ck', checkbox: true }// 選擇 ]], // columns: [[ {field: 'projectPartName', title: '分項名稱', width: 180, sortable: false}, {field: 'rationLimitedQuantity', title: '套餐限定數量', width: 100, sortable: false, align: 'right'}, { field: 'actualQuantity', title: '實際所需數量', width: 100, sortable: false, align: 'right', styler: function (value, row, index) { // 當實際所需數量 大於 套餐限定數量,則採起「加粗標紅」顯示。 if (row.actualQuantity > row.rationLimitedQuantity) { return "color:#AE1027;font-weight:bold;"; } } }, { field: 'rationExcessQuantity', title: '超出數量', width: 100, sortable: false, align: 'right', formatter: function (val) { if (val != null) { return Number(val).toFixed(2); } else { return val; } } }, { field: 'projectPartUnitPrice', title: '單價(元)', width: 90, sortable: false, align: 'right', formatter: function (val) { if (val != null) { return '¥' + Number(val).toFixed(2); } else { return val; } } }, { field: 'rationExcessAmount', title: '超出額(元)', width: 100, sortable: false, align: 'right', formatter: function (val) { if (val != null) { return '¥' + Number(val).toFixed(2); } else { return val; } } } ]], onLoadSuccess: function (data) { console.info("rationPackageDatagrid onLoadSuccess."); // 針對不一樣按鈕個性化處理 //$(this).datagrid("clearChecked"); //$(this).datagrid("clearSelections"); }, onDblClickRow: function (rowIndex, rowData) { console.info("rationPackageDatagrid onDblClickRow."); }, onSelect: function (rowIndex, rowData) { console.info('rationPackageDatagrid onSelect'); // 確保沒有任何緩存痕跡(必不可少) // 要點提示:在點擊選中新的一行時,使其只勾選當前行,故先清除全部歷史勾選項,讓勾選項與選中項同步。 $(this).datagrid("clearChecked"); $(this).datagrid("checkRow", rowIndex); } }); // end rationPackageExceedDatagrid }
經過 loadData 方法就能夠直接賦值了,不管是給予一個空數組,仍是一個有效的數組。要注意的是,在清空 datagrid 時,其對象值最好是這個格式:「{total: 0, rows: []}」緩存
// 清空 $rationPackageExceedDatagrid.datagrid('loadData', {total: 0, rows: []}); $rationPackageExceedDatagrid.datagrid("clearChecked"); $rationPackageExceedDatagrid.datagrid("clearSelections"); var rationPackageExceedDataArray = []; // 對數組進行賦值等處理... // 定額套餐分項-超出額 datagrid $rationPackageExceedDatagrid.datagrid('loadData', rationPackageExceedDataArray);
如下示例沒有找到 datagrid,只有 treegrid,好在總體的操做幾乎差很少,最終的賦值操做也相同。異步
<div id="ProjectPartCategoryAndItemDatagrid" style="width:auto;"></div>
// 初始化表格 function initDataGrid() { $datagrid.treegrid({ idField: 'projectPartId', treeField: 'projectPartName', singleSelect: false, animate: true, lines: true, //toolbar: "#generalDatagridToolbar", checkbox: true, cascadeCheck: true, fit: true, fitColumns: false, // 設置列固定寬度,true值表示自動填滿整個橫向空間 frozenColumns: [[ {field: 'ck', checkbox: true}, {field: 'projectPartName', title: '工程分項', width: 230, sortable: false} ]], columns: [[ {field: 'projectPartCode', title: '工程分項編碼', width: 100, sortable: false} ]], onLoadSuccess: function (row, data) { console.info("ProjectPartCategoryAndItemDatagrid onLoadSuccess."); $(".tooltipNote").tooltip({}); }, onClickRow: function (row) { var idField = $(this).treegrid('options').idField; console.info("clickRow," + idField + " = " + row[idField]); console.info(row); //級聯選擇 $(this).treegrid('cascadeCheck', { id: row[idField], //節點ID deepCascade: true //深度級聯 }); }, onDblClickRow: function (row) { console.info("ProjectPartCategoryAndItemDatagrid onDblClickRow."); var idField = $(this).treegrid('options').idField; var id = row[idField]; // 切換節點的 展開/摺疊 狀態 $datagrid.treegrid('toggle', id); }, onContextMenu: function (e, row) { console.info("ProjectPartCategoryAndItemDatagrid onContextMenu."); //var idField = $(this).treegrid('options').idField; //var id = row[idField]; // //e.preventDefault(); //$(this).treegrid('select', id); // //$('#editMenu').menu('show', { // left: e.pageX, // top: e.pageY //}); } }) }
經過 jQuery 的 ajax() 方法獲取到數據後,由 loadData 方法便可綁定數據。jsp
// 加載數據 function loadDataGrid() { console.info('加載表格 ProjectPartCategoryAndItemDatagrid'); $.ajax({ type: 'POST', dataType: 'JSON', url: UrlEnum.GetProjectPartCategoryAndItem, //async: false, // 同步 data: {}, success: function (result) { console.info("獲取數據成功,返回的數據爲:↓"); console.info(result); if (result.success) { console.info(result.data); $datagrid.treegrid('loadData', result.data); } else { if (result.operationType == operationTypeEnum.CookieTimeout) { result.message = decodeURIComponent(result.message); } $.messager.alert('提示', result.message, 'warning'); } } }); }