由於工作需要,項目使用前端 jQuery EasyUI - DataGrid 來控制數據表格。
1、加載相關js和css,因為easyui依賴jquery,所有加載easyui前要先加載jquery,否則為提示找不到datagrid
<!-- 加載jquery --> <script type="text/javascript" src="plugins/jquery/jquery-1.4.2.min.js"></script> <!-- 加載jquery-easyui --> <link rel="stylesheet" type="text/css" href="plugins/jquery/jquery-easyui-1.1.2/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="plugins/jquery/jquery-easyui-1.1.2/themes/icon.css"> <script type="text/javascript" src="plugins/jquery/jquery-easyui-1.1.2/jquery.easyui.min.js"></script>
2、界面設置table,確定其id
<table id="personManage"></table>
3、編寫js代碼
var objTable=$("#personManage"); objTable.datagrid({ pagination: true, url:'${ctx}/cpv3QuotationCtrl/query?RndId='+Math.random(), loadFilter:pagerFilter, queryParams:buildParams(), toolbar:"#toolbar", rownumbers:true, width:Number($("fieldset").css("width").replace("px",""))+20, columns: [[ { field: 'MD5_SIGNATURE',hidden:true}, { field: 'TMPE', title: '選擇',align:'center', width: 50,formatter:formatter_Select}, { field: 'QUOTATION_NAME', title: '報價單名稱', width:100,align:'center'}, { field: 'QUOTATION_STATUS', title: '報價單狀態', width: 100,align:'center',formatter:formatter_common_quotation}, { field: 'TOTAL_PLAN_COST', title: '總預估成本', width:100,align:'center'}, { field: 'QUOTATION_AMOUNT', title: '報價總金額', width:100,align:'center'}, { field: 'QUOTATION_VERSION', title: '報價單版本', width:100,align:'center'}, { field: 'CREATE_USER_ID', title: '創建人', width:100,align:'center'}, { field: 'CREATE_TIME', title: '創建時間', width:100,align:'center',formatter: formatDatebox}, { field: 'MODIFY_TIME', title: '最后修改時間', width:100,align:'center',formatter: formatDatebox} ]], fitColumns:true //自適應寬度、可以水平滾動 });
設置datagrid參數。參數也可以直接加在url上:url:"getRepeatPs.action?documentnumber="+documentnumber+"&simDegree="+simDegree,
/**創建查詢參數**/ function buildParams(){ var name=$("#name").val(); var projectId = "${projectId}"; var quotation_type=$("#quotation_type").combobox("getValue"); return { name:name, projectId:projectId, quotation_type:quotation_type }; }
4、編寫action層代碼或control
Map<String,String> params= new HashMap<String,String>(); try{ //前台獲取查詢條件 String projectId = StringUtils.trimToEmpty(request.getParameter("projectId")); params.put("name",StringUtils.trimToEmpty(request.getParameter("name")));//報價單名稱 params.put("quotation_type",StringUtils.trimToEmpty(request.getParameter("quotation_type")));//報價單狀態 //傳入分頁參數 params.put("page",StringUtils.trimToEmpty(request.getParameter("page"))); params.put("rows",StringUtils.trimToEmpty(request.getParameter("rows"))); //查詢封裝數據 return this.quotationService.queryAllQuotationByProject(params,projectId); }catch(Exception e){ throw new ControllerException("",e); }
其中的page由datagrid傳入,當用戶在datagrid左下角選擇每頁顯示的行數時,datagrid會將該值已參數形式附加到url后面傳入action中,名字就叫page,還要將結果總行數total傳給datagrid,用於分頁
不知道是datagrid配置有誤還是datagrid的bug,datagrid的結果集和每頁顯示的行數都叫rows,重名了
解決辦法如上,結果集還是叫rows,但是List的類型改為Object而不能用實體的類型,每頁顯示的行數通過request獲取。List<Map<String, Object>> list。
頁面通過ajax調用datagrid方法就能直接顯示表的數據了。此外也可以直接寫好thead,tbody數據由datagrid傳入。
<table id="projectGrid" data-options=" pagination:true, pagePosition:'bottom', fitColumns:false, enableHeaderClickMenu:false, singleSelect:false, autoRowHeight:true, nowrap:true"> <thead data-options="frozen:true"> <tr> <th data-options="field:'aa',checkbox:true"></th> <th data-options="field:'projectId'">項目編號</th> <th data-options="field:'projectName',width:150,align:'center'"> 項目名稱 </th> </tr> </thead> <thead> <tr> <th data-options="field:'friendName',width:100,align:'center'"> 客戶全稱 </th>
$("#projectGrid").datagrid({ url:'${ctx}/cpv3ProjectCtrl/getProjectList?ram='+Math.random(), queryParams:$.serializeObject($('#searchForm')) });
詳情可以查看datagrid的官方API或翻譯API:
【轉】http://www.cnblogs.com/Philoo/archive/2011/11/16/jeasyui_api_datagrid.html
擴展自 $.fn.panel.defaults ,用 $.fn.datagrid.defaults 重寫了 defaults 。
依賴
- panel
- resizable
- linkbutton
- pagination
用法
- <table id="tt"></table>
- $('#tt').datagrid({
- url:'datagrid_data.json',
- columns:[[
- {field:'code',title:'Code',width:100},
- {field:'name',title:'Name',width:100},
- {field:'price',title:'Price',width:100,align:'right'}
- ]]
- });
數據表格(DataGrid)的特性
其特性擴展自 panel,下列是為 datagrid 增加的特性。
名稱 |
類型 |
說明 |
默認值 |
columns |
array |
datagrid 的 column 的配置對象,更多詳細請參見 column 的特性。 |
null |
frozenColumns |
array |
和列的特性一樣,但是這些列將被凍結在左邊。 |
null |
fitColumns |
boolean |
True 就會自動擴大或縮小列的尺寸以適應表格的寬度並且防止水平滾動。 |
false |
striped |
boolean |
True 就把行條紋化。(即奇偶行使用不同背景色) |
false |
method |
string |
請求遠程數據的 method 類型。 |
post |
nowrap |
boolean |
True 就會把數據顯示在一行里。 |
true |
idField |
string |
標識字段。 |
null |
url |
string |
從遠程站點請求數據的 URL。 |
null |
loadMsg |
string |
當從遠程站點加載數據時,顯示的提示信息。 |
Processing, please wait … |
pagination |
boolean |
True 就會在 datagrid 的底部顯示分頁欄。 |
false |
rownumbers |
boolean |
True 就會顯示行號的列。 |
false |
singleSelect |
boolean |
True 就會只允許選中一行。 |
false |
pageNumber |
number |
當設置了 pagination 特性時,初始化頁碼。 |
1 |
pageSize |
number |
當設置了 pagination 特性時,初始化頁碼尺寸。 |
10 |
pageList |
array |
當設置了 pagination 特性時,初始化頁面尺寸的選擇列表。 |
[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' 的樣式,該函數需要兩個參數: |
|
loadFilter |
function |
返回過濾的數據去顯示。這個函數需要一個參數 'data' ,表示原始數據。 你可以把原始數據變成標准數據格式,此函數必須返回標准數據對象,含有 'total' 和 'rows' 特性。 |
|
editors |
object |
定義編輯行時的 editor 。 |
預定義的 editor |
view |
object |
定義 datagrid 的 view 。 |
默認的 view |
列(Column)的特性
DataGrid 的 Column 是一個數組對象,它的每個元素也是一個數組。數組元素的元素是一個配置對象,它定義了每個列的字段。
代碼示例:
- columns:[[
- {field:'itemid',title:'Item ID',rowspan:2,width:80,sortable:true},
- {field:'productid',title:'Product ID',rowspan:2,width:80,sortable:true},
- {title:'Item Details',colspan:4}
- ],[
- {field:'listprice',title:'List Price',width:80,align:'right',sortable:true},
- {field:'unitcost',title:'Unit Cost',width:80,align:'right',sortable:true},
- {field:'attr1',title:'Attribute',width:100},
- {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 就顯示 checkbox。 |
undefined |
formatter |
function |
單元格的格式化函數,需要三個參數: |
undefined |
styler |
function |
單元格的樣式函數,返回樣式字符串來自定義此單元格的樣式,例如 'background:red' 。此函數需要三個參數: |
undefined |
sorter |
function |
自定義字段的排序函數,需要兩個參數: |
undefined |
editor |
string,object |
指編輯類型。當是 string 時指編輯類型,當 object 時包含兩個特性: text、textarea、checkbox、numberbox、validatebox、datebox、combobox、combotree。 |
undefined |
編輯器(Editor)
用 $.fn.datagrid.defaults.editors 重寫了 defaults。
每個編輯器有下列行為:
名稱 |
參數 |
說明 |
init |
container, options |
初始化編輯器並且返回目標對象。 |
destroy |
target |
如果必要就銷毀編輯器。 |
getValue |
target |
從編輯器的文本返回值。 |
setValue |
target , value |
給編輯器設置值。 |
resize |
target , width |
如果必要就調整編輯器的尺寸。 |
例如,文本編輯器(text editor)像下面這樣定義:
- $.extend($.fn.datagrid.defaults.editors, {
- text: {
- init: function(container, options){
- var input = $('<input type="text" class="datagrid-editable-input">').appendTo(container);
- return input;
- },
- getValue: function(target){
- return $(target).val();
- },
- 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. });
數據表格視圖(DataGrid View)
用 $.fn.datagrid.defaults.view 重寫了 defaults。
view 是一個對象,它告訴 datagrid 如何呈現行。這個對象必須定義下列方法。
名稱 |
參數 |
說明 |
render |
target, container, frozen |
當數據加載時調用。 |
renderFooter |
target, container, frozen |
這是呈現行腳選項的函數。 |
renderRow |
target, fields, frozen, rowIndex, rowData |
這是選項的函數,將會被 render 函數調用。 |
refreshRow |
target, rowIndex |
定義如何刷新指定的行。 |
onBeforeRender |
target, rows |
視圖被呈現前觸發。 |
onAfterRender |
target |
視圖被呈現后觸發。 |
事件
其事件擴展自 panel,下列是為 datagrid 增加的事件。
名稱 |
參數 |
說明 |
onLoadSuccess |
data |
當數據加載成功時觸發。 |
onLoadError |
none |
加載遠程數據發生某些錯誤時觸發。 |
onBeforeLoad |
param |
發送加載數據的請求前觸發,如果返回 false加載動作就會取消。 |
onClickRow |
rowIndex, rowData |
當用戶點擊一行時觸發,參數包括: |
onDblClickRow |
rowIndex, rowData |
當用戶雙擊一行時觸發,參數包括: |
onClickCell |
rowIndex, field, value |
當用戶單擊一個單元格時觸發。 |
onDblClickCell |
rowIndex, field, value |
當用戶雙擊一個單元格時觸發。 |
onSortColumn |
sort, order |
當用戶對一列進行排序時觸發,參數包括: |
onResizeColumn |
field, width |
當用戶調整列的尺寸時觸發。 |
onSelect |
rowIndex, rowData |
當用戶選中一行時觸發,參數包括: |
onUnselect |
rowIndex, rowData |
當用戶取消選擇一行時觸發,參數包括: |
onSelectAll |
rows |
當用戶選中全部行時觸發。 |
onUnselectAll |
rows |
當用戶取消選中全部行時觸發。 |
onBeforeEdit |
rowIndex, rowData |
當用戶開始編輯一行時觸發,參數包括: |
onAfterEdit |
rowIndex, rowData, changes |
當用戶完成編輯一行時觸發,參數包括: |
onCancelEdit |
rowIndex, rowData |
當用戶取消編輯一行時觸發,參數包括: |
onHeaderContextMenu |
e, field |
當 datagrid 的頭部被右鍵單擊時觸發。 |
onRowContextMenu |
e, rowIndex, rowData |
當右鍵點擊行時觸發。 |
方法
名稱 |
參數 |
說明 |
options |
none |
返回 options 對象。 |
getPager |
none |
返回 pager 對象。 |
getPanel |
none |
返回 panel 對象。 |
getColumnFields |
frozen |
返回列的字段,如果 frozen 設定為 true,凍結列的字段被返回。 |
getColumnOption |
field |
返回指定列的選項。 |
resize |
param |
調整尺寸和布局。 |
load |
param |
加載並顯示第一頁的行,如果指定 param 參數,它將替換 queryParams 特性。 |
reload |
param |
重新加載行,就像 load 方法一樣,但是保持在當前頁。 |
reloadFooter |
footer |
重新加載腳部的行。 |
loading |
none |
顯示正在加載狀態。 |
loaded |
none |
隱藏正在加載狀態。 |
fitColumns |
none |
使列自動展開/折疊以適應 datagrid 的寬度。 |
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 |
獲取指定行的編輯器們。每個編輯器有下列特性: |
getEditor |
options |
獲取指定的編輯器, options 參數包含兩個特性: |
refreshRow |
index |
刷新一行。 |
validateRow |
index |
驗證指定的行,有效時返回 true。 |
updateRow |
param |
更新指定的行, param 參數包含下列特性: |
appendRow |
row |
追加一個新行。 |
insertRow |
param |
插入一個新行, param 參數包括下列特性: |
deleteRow |
index |
刪除一行。 |
getChanges |
type |
獲取最后一次提交以來更改的行,type 參數表示更改的行的類型,可能的值是:inserted、deleted、updated,等等。 當 type 參數沒有分配時,返回所有改變的行。 |
acceptChanges |
none |
提交自從被加載以來或最后一次調用acceptChanges以來所有更改的數據。 |
rejectChanges |
none |
回滾自從創建以來或最后一次調用acceptChanges以來所有更改的數據。 |
mergeCells |
options |
把一些單元格合並為一個單元格,options 參數包括下列特性: |
showColumn |
field |
顯示指定的列。 |
hideColumn |
field |
隱藏指定的列。 |