为 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'); } } }); }