easyui datagrid使用參考

from:https://www.cnblogs.com/huangf714/p/5948420.html

數據表格

繼承$.fn.panel.defaults,使用$.fn.datagrid.defaults重載默認值。html

依賴關係

  • 控制面板
  • 縮放
  • 連接按鈕
  • 分頁

使用方法

 
  1. <table id="tt"></table>  
 
  1. $('#tt').datagrid({  
  2.     url:'datagrid_data.json',  
  3.     columns:[[  
  4.         {field:'code',title:'Code',width:100},  
  5.         {field:'name',title:'Name',width:100},  
  6.         {field:'price',title:'Price',width:100,align:'right'}  
  7.     ]]  
  8. });  

數據表格屬性

屬性繼承控制面板,如下是數據表格獨有的屬性。jquery

名稱類型描述默認值ajax

columns(列) array(數組) 數據表格列配置對象,查看列屬性以獲取更多細節。 null
frozenColumns(固定列) array(數組) 跟列屬性同樣,可是這些列固定在左邊,不會滾動。 null
fitColumns(自適應列寬) boolean(布爾型) 設置爲true將自動使列適應表格寬度以防止出現水平滾動。 false
striped(顯示條紋) boolean(布爾型) 設置爲true將交替顯示行背景。 false
method(方法) string(字符串) 請求遠程數據的方法類型。 post
nowrap(截取) boolean(布爾型) 設置爲true,當數據長度超出列寬時將會自動截取。 true
idField(id字段) string(字符串) 代表該列是一個惟一列。 null
url(超連接) string(字符串) 一個用以從遠程站點請求數據的超連接地址。 null
loadMsg(載入時信息) string(字符串) 當從遠程站點載入數據時,顯示的一條快捷信息。 Processing, please wait …
pagination(分頁) boolean(布爾型) 設置true將在數據表格底部顯示分頁工具欄。 false
rownumbers(行數) boolean(布爾型) 設置爲true將顯示行數。 false
singleSelect(單選模式) boolean(布爾型) 設置爲true將只容許選擇一行。 false
pageNumber(當前頁碼) number(數字) 當設置分頁屬性時,初始化分頁碼。 1
pageSize(每頁記錄數) number(數字) 當設置分頁屬性時,初始化每頁記錄數。 10
pageList(可選擇的每頁記錄數) array 當設置分頁屬性時,初始化每頁記錄數列表。 [10,20,30,40,50]
queryParams(查詢參數) object(對象) 當請求遠程數據時,發送的額外參數。 {}
sortName(默認排序) string(字符串) 當數據表格初始化時以哪一列來排序。 null
sortOrder(排序順序) string(字符串) 定義排序順序,能夠是'asc'或者'desc'(正序或者倒序)。 asc
remoteSort(遠程排序) boolean(布爾型) 定義是否經過遠程服務器對數據排序。 true
showFooter(顯示行底) boolean(布爾型) 定義是否顯示行底(若是是作統計表格,這裏能夠顯示總計等)。 false
rowStyler(行樣式) function(函數) 返回樣式,如:'background:red',function有2個參數:
index:行索引,從0開始.
row:對應於該行記錄的對象。
 
loadFilter(載入過濾器) function(函數) 返回用以顯示的已過濾數據,function有一個參數'data'表示原始數據,你能夠將原始數據改變爲規範的數據格式,該函數必須返回包含 'total'和'rows'屬性的標準數據對象。  
editors(編輯模式) object(對象) 定義當編輯一行時的編輯模式。 predefined editors
view(視圖) object(對象) 定義數據表格的視圖。 default view

列屬性

數據表格的列是一個對象數組,即這個對象中的元素也是一個數組(js中數組是對象)。 對象數組中的每個元素都是可配置的對象,每一個可配置對象定義一個列。數據庫

 

示例代碼:json

 
  1. columns:[[  
  2.     {field:'itemid',title:'Item ID',rowspan:2,width:80,sortable:true},  
  3.     {field:'productid',title:'Product ID',rowspan:2,width:80,sortable:true},  
  4.     {title:'Item Details',colspan:4}  
  5. ],[  
  6.     {field:'listprice',title:'List Price',width:80,align:'right',sortable:true},  
  7.     {field:'unitcost',title:'Unit Cost',width:80,align:'right',sortable:true},  
  8.     {field:'attr1',title:'Attribute',width:100},  
  9.     {field:'status',title:'Status',width:60}  
  10. ]]  

 

名稱類型描述默認值數組

title(標題) string(字符串) 列標題。 undefined
field(字段) string(字符串) 列字段。 undefined
width(寬度) number(數字) 列寬。 undefined
rowspan(跨行數) number(數字) 代表一個單元格跨幾行。 undefined
colspan(跨列數) number(數字) 代表一個單元格跨幾列。 undefined
align(對其方式) string(字符串) 代表如何對其列數據,可選值:'left','right','center'。 undefined
sortable(可排序) boolean(布爾型) 設置爲true容許對該列排序。 undefined
resizable(縮放) boolean(布爾型) 設置爲true容許該列被縮放。 undefined
hidden(隱藏) boolean(布爾型) 設置爲true將隱藏列。 undefined
checkbox(複選框) boolean(布爾型) 設置爲true將顯示覆選框。 undefined
formatter(格式化) function(函數) 格式化單元格函數,有3個參數:
value:字段的值。
rowData:行數據。
rowIndex:行索引。
undefined
styler(樣式) function(函數) 單元格樣式函數,返回樣式字符串裝飾表格如'background:red',function有3個參數:
value:字段值。
rowData:行數據。
rowIndex:行索引。
undefined
sorter(排序器) function(函數) T自定義字段排序函數,有2個參數:
a:該列的第一個值。
b:該列的第二個值。
undefined
editor(編輯器) string,object(字符串,對象) 代表編輯類型。若是屬性是字符串類型表示編輯類型,若是是對象則包含2個參數:
type:字符串,編輯類型,可選值:text,textarea,checkbox,numberbox,validatebox,datebox,combobox,combotree。
options:對象,對象於編輯類型的編輯器屬性。
undefined

編輯器

使用$.fn.datagrid.defaults.editors重載默認值。服務器

 

每一個編輯器都有如下方法:app

名稱參數描述編輯器

init container, options 初始化編輯器並返回目標對象。
destroy target 銷燬編輯器。
getValue target 獲取編輯框的值。
setValue target , value 設置編輯框的值。
resize target , width 調整編輯器

例如,以下代碼將定義一個文本編輯器:ide

 
  1. $.extend($.fn.datagrid.defaults.editors, {  
  2.     text: {  
  3.         init: function(container, options){  
  4.             var input = $('<input type="text" class="datagrid-editable-input">').appendTo(container);  
  5.             return input;  
  6.         },  
  7.         getValue: function(target){  
  8.             return $(target).val();  
  9.         },  
  10.         setValue: function(target, value){  
  11.             $(target).val(value);  
  12.         },  
  13.         resize: function(target, width){  
  14.             var input = $(target);  
  15.             if ($.boxModel == true){  
  16.                 input.width(width - (input.outerWidth() - input.width()));  
  17.             } else {  
  18.                 input.width(width);  
  19.             }  
  20.         }  
  21.     }  
  22. });  

數據表格視圖

使用$.fn.datagrid.defaults.view重載默認值。

視圖是一個告訴數據表格如何呈現行記錄的對象,對象必須定義如下方法:

名稱參數描述

render target, container, frozen 當數據載入時調用。
target: DOM對象,數據網格對象。
container: 行記錄容器。
frozen: 是否呈現固定容器。
renderFooter target, container, frozen 這是一個可選函數用以展示行底。
renderRow target, fields, frozen, rowIndex, rowData 這是一個可選函數,它能夠被render函數調用。
refreshRow target, rowIndex 定義如何刷新指定的行。
onBeforeRender target, rows 在視圖被呈現以前觸發。
onAfterRender target 在視圖被程序以後觸發。

事件

事件繼承控制面板,如下是數據表格獨有的屬性。

名稱參數描述

onLoadSuccess data 當數據載入成功時觸發。
onLoadError none 當載入遠程數據發生錯誤時觸發。
onBeforeLoad param 在請求載入數據以前觸發,若是返回false將取消載入。
onClickRow rowIndex, rowData 當用戶點擊行時觸發,參數以下:
rowIndex:被點擊的行索引,從0開始。
rowData:對應於被點擊的行的記錄。
onDblClickRow rowIndex, rowData 當用戶雙擊一行時觸發,參數以下:
rowIndex:被點擊的行索引,從0開始。
rowData:對應於被點擊的行的記錄。
onClickCell rowIndex, field, value 當用戶點擊單元格時觸發。
onDblClickCell rowIndex, field, value 當用戶雙擊單元格時觸發。
onSortColumn sort, order 當用戶對列排序時觸發,參數以下:
sort:排序字段名稱。
order:排序順序。
onResizeColumn field, width 當用戶調整列寬時觸發。
onSelect rowIndex, rowData 當用戶選擇一行是觸發,參數以下:
rowIndex:被選擇的行索引,從0開始。
rowData:對應於被選擇行的記錄。
onUnselect rowIndex, rowData 當用戶取消選擇一行時觸發,參數以下:
rowIndex:被取消選擇的行索引,從0開始。
rowData:對應於被取消選擇行的記錄。
onSelectAll rows 當用戶選擇全部行時觸發。
onUnselectAll rows 當用戶取消選擇全部行時觸發。
onBeforeEdit rowIndex, rowData 當用戶開始編輯一行時觸發,參數以下:
rowIndex:正在編輯的行索引,從0開始。
rowData:對應於正在編輯的行的記錄。
onAfterEdit rowIndex, rowData, changes 當用戶編輯完成時觸發,參數以下:
rowIndex:正在編輯的行索引,從0開始。
rowData:對應於正在編輯的行的記錄。
changes:被改變的字段內容,對應方式爲字段:值。
onCancelEdit rowIndex, rowData 當用戶取消編輯行時觸發,參數以下:
rowIndex:正在編輯的行索引,從0開始。
rowData:對應於正在編輯的行的記錄。
onHeaderContextMenu e, field 當數據表格的列標題被鼠標右鍵單擊時觸發。
onRowContextMenu e, rowIndex, rowData 當一行被鼠標右鍵單擊時觸發。

方法

 

名稱參數描述

options none 返回屬性對象。
getPager none 返回頁面對象。
getPanel none 返回控制面板對象。
getColumnFields frozen 返回列字段,若是設置了frozen屬性爲true,將返回固定列的字段名。
getColumnOption field 返回特定的列屬性。
resize param 縮放和佈局。
load param 載入並顯示第一頁的記錄,若是傳遞了'param'參數,它將會覆蓋查詢參數屬性的值。
reload param 重載記錄,跟'load'方法同樣可是重載的是當前頁的記錄而非第一頁。
reloadFooter footer 重載行底記錄。
loading none 顯示載入狀態。
loaded none 隱藏載入狀態。
fitColumns none 讓列寬自動適應數據表格的寬度。
fixColumnSize none 固定列尺寸。
fixRowHeight index 固定特定列的高度。
loadData data 載入本地數據,舊記錄將被移除。
getData none 返回已載入數據。
getRows none 返回當前頁的記錄。
getFooterRows none 返回行底記錄。
getRowIndex row 返回指定行的索引,row參數能夠是行記錄或者是一個id字段的值。
getSelected none 返回第一個被選擇的行記錄或null。
getSelections none 返回全部被選擇的行,當沒有記錄被選擇時,將返回一個空數組。
clearSelections none 取消全部的已選擇項。
selectAll none 全選。
unselectAll none 取消全選。
selectRow index 選擇一行,行索引從0開始。
selectRecord idValue 經過傳遞id參數來選擇一行。
unselectRow index 取消選擇一行。
beginEdit index 開始編輯一行。
endEdit index 結束編輯。
cancelEdit index 取消編輯。
getEditors index 獲取指定行的編輯器,每一個編輯器有以下屬性:
actions:編輯器能夠作的行爲。
target:目標編輯器jQuery對象。
field:字段名。
type:編輯器類型。
getEditor options 獲取特定的編輯器,options參數有2個屬性:
index:行索引。
field:字段名。
refreshRow index 刷新一行。
validateRow index 校驗指定的行,若是有效返回true。
updateRow param 更新指定的行,param參數包含以下屬性:
index:要更新的行索引。
row:新的行數據。
appendRow row 添加一行。
insertRow param 插入一個新行,param參數包含以下屬性:
index:要插入的行索引,若是沒有定義則在最後面添加一個新行。
row:行數據。
deleteRow index 刪除一行。
getChanges type 獲取從最後一次提交開始的被修改的全部行,type參數代表修改的類型,可選值:inserted,deleted,updated等 。當沒有傳遞type參數時,返回全部被修改的行。
acceptChanges none 提交全部修改的數據,提交後的數據將不能再修改或者回滾。
rejectChanges none 回滾全部被刪除的行。
mergeCells options 合併單元格,options參數包含以下屬性:
index:行索引。
field:字段名。
rowspan:整合單元格要跨的行數。
colspan:整合單元格要跨的列數。
showColumn field 顯示特定的列。
hideColumn field 隱藏特定的列。

 

 

建立datagrid

在頁面上添加一個div或table標籤,而後用jquery獲取這個標籤,並初始化一個datagrid。代碼以下:

頁面上的div標籤:

<div id="magazineGrid">
</div>

js代碼:

$('#magazineGrid').datagrid({
    height: 340,
    url: 'url',
    method: 'POST',
    queryParams: { 'id': id },
    idField: '產品ID',
    striped: true,
    fitColumns: true,
    singleSelect: false,
    rownumbers: true,
    pagination: false,
    nowrap: false,
    pageSize: 10,
    pageList: [10, 20, 50, 100, 150, 200],
    showFooter: true,
    columns: [[
        { field: 'ck', checkbox: true },
        { field: '刊名', title: '刊名', width: 180, align: 'left' },
        { field: '類別', title: '類別', width: 150, align: 'left' },
        { field: '月份', title: '月份', width: 100, align: 'left' },
        { field: '期次', title: '期次', width: 100, align: 'left' },
        { field: '價格', title: '價格', width: 100, align: 'right' },
        { field: '訂閱數', title: '訂閱數', width: 100, align: 'right' },
        { field: '庫存數', title: '庫存數', width: 100, align: 'right' },
        { field: '郵寄方式', title: '郵寄方式', width: 80, align: 'left' },
        { field: '數量', title: '數量', width: 80, align: 'left',
            editor: {
                type: 'numberbox',
                options: {
                    min: 0,
                    precision: 0
                }
            }
        }
    ]],
    onBeforeLoad: function (param) {
    },
    onLoadSuccess: function (data) {
        
    },
    onLoadError: function () {
        
    },
    onClickCell: function (rowIndex, field, value) {
        
    }
});

 

ajax請求返回的數據格式

datagrid在建立完成後會根據url請求數據,這是經過ajax來完成的。服務器在完成請求處理後應返回帶有rows屬性的數據,若是用到分頁,還須要有total屬性:

var rst = new { total = iTotalCount, rows = entityList };

說到ajax請求,不免須要在請求的時候傳入一些查詢條件,我一般是在onBeforeLoad事件中添加查詢條件的:

onBeforeLoad: function (param) {
    var bId = $("#txtBId").val();
    var AllSearchKey = $("#txtAllSearchKey").val();
    param.bId = bId;
    param.AllSearchKey = AllSearchKey;
}

 

分頁處理

若是要啓用分頁,在datagrid配置中,首先要加入以下配置:

pagination: true,

這樣一來咱們的datagrid底部就會出現一個分頁工具欄。

這個時侯,datagrid在請求數據的時候會自動的添加分頁的信息:

  • page:當前請求的頁碼
  • rows:每頁要顯示的行數

在服務器端獲取到這兩個參數值,而後經過獲取數據庫中的總數據行數來完成數據處理。

 

關於checkbox列

上面的js代碼建立的datagrid自己已經添加了checkbox列,就是第一列。checkbox列將會自適應寬度。

{ field: 'ck', checkbox: true },

 

關於rownumber列

rownumber列的配置是在全局設置的,若是設置爲true則會添加一列來顯示行號。

rownumbers: true

 

行編輯功能的實現

datagrid自己提供了行編輯的功能。只須要兩個步驟:

  1. 設置列的editor屬性
  2. 手動觸發編輯

第一步,咱們須要在column配置中指明editor,editor有兩個屬性,type和options,有效的type字符串有:

text,textarea,checkbox,numberbox,validatebox,datebox,combobox,combotree

options則對應這些控件的具體配置,包括事件等。

editor: {
    type: 'numberbox',
    options: {
        min: 0,
        precision: 0
    }
}

若是不須要特殊的options配置,直接將type字符串賦給editor便可。

editor:'text'

第二步,咱們須要監聽datagrid的onRowClick事件,或者onCellClick事件,我更願意監聽onCellClick事件,能夠根據點擊不一樣的字段來進入編輯模式,並設置單元格編輯控件的focus。

onClickCell: function (rowIndex, field, value) {
    beginEditing(rowIndex, field, value)
}

這裏調用了beginEditing方法:

var editIndex = undefined;
var beginEditing = function (rowIndex, field, value) {
    if (field != "數量")
        return;

    if (rowIndex != editIndex) {
        if (endEditing()) {
            $('#magazineGrid').datagrid('beginEdit', rowIndex);
            editIndex = rowIndex;

            var ed = $('#magazineGrid').datagrid('getEditor', { index: rowIndex, field: '數量' });
            $(ed.target).focus().bind('blur', function () {
                endEditing();
            });
        } else {
            $('#magazineGrid').datagrid('selectRow', editIndex);
        }
    }
}
var endEditing = function () {
    if (editIndex == undefined) { return true }
    if ($('#magazineGrid').datagrid('validateRow', editIndex)) {
        var ed = $('#magazineGrid').datagrid('getEditor', { index: editIndex, field: '數量' });
        var number = $(ed.target).numberbox('getValue');
        $('#magazineGrid').datagrid('getRows')[editIndex]['數量'] = number;
        $('#magazineGrid').datagrid('endEdit', editIndex);
        $('#magazineGrid').datagrid('selectRow', editIndex);
        editIndex = undefined;
        return true;
    } else {
        return false;
    }
}

 

列格式化輸出 formatter

在列的配種中設置formatter

formatter: function (value, row, index) {
    if (row.user) {
        return row.user.name;
    } else {
        return value;
    }
}

 

使用工具欄

toolbar: [{
    text: 'Add',
    iconCls: 'icon-add',
    handler: function () { alert('add') }
}, {
    text: 'Cut',
    iconCls: 'icon-cut',
    handler: function () { alert('cut') }
}, '-', {
    text: 'Save',
    iconCls: 'icon-save',
    handler: function () { alert('save') }
}],

 

使用CardView效果

cardView效果是這樣的:

image

cardView的代碼:

var cardview = $.extend({}, $.fn.datagrid.defaults.view, {
    renderRow: function (target, fields, frozen, rowIndex, rowData) {
        var cc = [];
        cc.push('<td colspan=' + fields.length + ' style="padding:10px 5px;border:0;">');
        if (!frozen) {
            var aa = rowData.itemid.split('-');
            var img = 'shirt' + aa[1] + '.gif';
            cc.push('<img src="images/' + img + '" style="width:150px;float:left">');
            cc.push('<div style="float:left;margin-left:20px;">');
            for (var i = 0; i < fields.length; i++) {
                var copts = $(target).datagrid('getColumnOption', fields[i]);
                cc.push('<p><span class="c-label">' + copts.title + ':</span> ' + rowData[fields[i]] + '</p>');
            }
            cc.push('</div>');
        }
        cc.push('</td>');
        return cc.join('');
    }
});
$(function () {
    $('#tt').datagrid({
        view: cardview
    });
});

cardView實際上是使用了datagrid的view配置,重寫了其默認的renderRow方法。基於這種實現,咱們能夠顯示更多樣式的view。

相關文章
相關標籤/搜索