EasyUI DataGrid 基於 Ajax 自定義取值(loadData)

Markdown

爲 datagrid 加載數據分兩種狀況:javascript

  • 一種是基於 Ajax 請求獲取數據而後經過"loadData"方法來賦值;
  • 另外一種是直接使用 datagrid 自帶的"load"方法向服務端發起請求。

不管採起哪種方式,一般建議將 datagrid 的定義(Init)和加載(Load)分做兩個方法來撰寫。
如下總結一下使用 Ajax 方法加載 datagrid 的使用過程。css

1、純JS本地賦值

這種方式沒有 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>

二、JSP 片斷

<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

三、js 初始化

能夠注意,這個函數是以 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);

2、經過 Ajax 賦值(treegrid)

如下示例沒有找到 datagrid,只有 treegrid,好在總體的操做幾乎差很少,最終的賦值操做也相同。異步

一、JSP 片斷

<div id="ProjectPartCategoryAndItemDatagrid" style="width:auto;"></div>

二、js 初始化

// 初始化表格
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');
            }
        }
    });
}
相關文章
相關標籤/搜索