關於JQGrid使用引數介紹
jqGrid安裝很簡單,只需把相應的css、js檔案加入到頁面中即可。
按照官網文件:
/myproject/css/
ui.jqgrid.css
/ui-lightness/
/images/
jquery-ui-1.7.2.custom.css
/myproject/js/
/i18n/
grid.locale-bg.js
list of all language files
….
Changes.txt
jquery-1.3.2.min.js
jquery.jqGrid.min.js
在頁面中寫法:
Java程式碼
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>My First Grid</title>
<link rel="stylesheet" type="text/css" media="screen" href="css/ui-lightness/jquery-ui-1.7.1.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="js/src/css/ui.jqgrid.css" />
<link rel="stylesheet" type="text/css" media="screen" href="js/src/css/jquery.searchFilter.css" />
<style>
html, body {
margin: 0;
padding: 0;
font-size: 75%;
}
</style>
<script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="js/src/grid.loader.js" type="text/javascript"></script>
</head>
<body>
...
</body>
</html>
需要說明的是,jquery-ui的字型大小與jqgrid字型大小不一致,故需要在頁面上在加上一段
style來指定頁面上文字大小。
jqGrid面板
從3.5版本開始,jqGrid完全支援jquery UI的theme。我們可以從http://jqueryui.com/themeroller/下載我們所需要的theme。當然,你也可以編輯自己的theme。jqGrid
也並不需要把所有的css檔案都引入進來,只需匯入核心css檔案“ui.theme.css ” 以及“ui.core.css”即可,檔案位於目錄development-bundle/themes下。
jqGrid原理
jqGrid是典型的B/S架構,伺服器端只是提供資料管理,客戶端只提供資料顯示。換句話說,jqGrid可以以一種更加簡單的方式來展現你資料庫的資訊,而且也可以把客戶端資料傳回給伺服器端。
對於jqGrid我們所關心的就是:必須有一段程式碼把一些頁面資訊儲存到資料庫中,而且也能夠把響應資訊返回給客戶端。jqGrid是用ajax來實現對請求與響應的處理。
jqGrid引數
名稱 |
型別 |
描述 |
預設值 |
可修改 |
url |
string |
獲取資料的地址 |
||
datatype |
string |
從伺服器端返回的資料型別,預設xml。可選型別:xml,local,json,jsonnp,script,xmlstring,jsonstring,clientside |
||
mtype |
string |
ajax提交方式。POST或者GET,預設GET |
||
colNames |
Array |
列顯示名稱,是一個數組物件 |
||
colModel |
Array |
常用到的屬性:name 列顯示的名稱;index 傳到伺服器端用來排序用的列名稱;width 列寬度;align 對齊方式;sortable 是否可以排序 |
||
pager |
string |
定義翻頁用的導航欄,必須是有效的html元素。翻頁工具欄可以放置在html頁面任意位置 |
||
rowNum |
int |
在grid上顯示記錄條數,這個引數是要被傳遞到後臺 |
||
rowList |
array |
一個下拉選擇框,用來改變顯示記錄數,當選擇時會覆蓋rowNum引數傳遞到後臺 |
||
sortname |
string |
預設的排序列。可以是列名稱或者是一個數字,這個引數會被提交到後臺 |
||
viewrecords |
boolean |
定義是否要顯示總記錄數 |
||
caption |
string |
表格名稱 |
||
[a1] |
object |
對ajax引數進行全域性設定,可以覆蓋ajax事件 |
null |
是 |
[a2] |
object |
對ajax的select引數進行全域性設定 |
null |
是 |
altclass |
String |
用來指定行顯示的css,可以編輯自己的css檔案,只有當altRows設為 ture時起作用 |
ui-priority-secondary |
|
altRows |
boolean |
設定表格 zebra-striped 值 |
||
autoencode |
boolean |
對url進行編碼 |
false |
是 |
autowidth |
boolean |
如果為ture時,則當表格在首次被建立時會根據父元素比例重新調整表格寬度。如果父元素寬度改變,為了使表格寬度能夠自動調整則需要實現函式:setGridWidth |
false |
否 |
cellLayout |
integer |
定義了單元格padding + border 寬度。通常不必修改此值。初始值為 |
5 |
是 |
cellEdit |
boolean |
啟用或者禁用單元格編輯功能 |
false |
是 |
cellsubmit |
String |
定義了單元格內容儲存位置 |
‘remote’ |
是 |
cellurl |
String |
單元格提交的url |
空值 |
是 |
datastr |
String |
xmlstring或者jsonstring |
空值 |
是 |
deselectAfterSort |
boolean |
只有當datatype為local時起作用。當排序時不選擇當前行 |
true |
是 |
direction |
string |
表格中文字的顯示方向,從左向右(ltr)或者從右向左(rtr) |
ltr |
否 |
editurl |
string |
定義對form編輯時的url |
空值 |
是 |
emptyrecords |
string |
當返回的資料行數為0時顯示的資訊。只有當屬性 viewrecords 設定為ture時起作用 |
是 |
|
ExpandColClick |
boolean |
當為true時,點選展開行的文字時,treeGrid就能展開或者收縮,不僅僅是點選圖片 |
true |
否 |
ExpandColumn |
string |
指定那列來展開tree grid,預設為第一列,只有在treeGrid為true時起作用 |
空值 |
否 |
[a3] |
boolean |
當為true時,會在翻頁欄之上增加一行 |
false |
否 |
forceFit |
boolean |
當為ture時,調整列寬度不會改變表格的寬度。當shrinkToFit 為false時,此屬性會被忽略 |
false |
否 |
gridstate |
string |
定義當前表格的狀態:'visible' or 'hidden' |
visible |
否 |
gridview |
boolean |
構造一行資料後新增到grid中,如果設為true則是將整個表格的資料都構造完成後再新增到grid中,但treeGrid, subGrid, or afterInsertRow 不能用 |
false |
是 |
height |
mixed |
表格高度,可以是數字,畫素值或者百分比 |
150 |
否 |
hiddengrid |
boolean |
當為ture時,表格不會被顯示,只顯示錶格的標題。只有當點選顯示錶格的那個按鈕時才會去初始化表格資料。 |
false |
否 |
hidegrid |
boolean |
啟用或者禁用控制表格顯示、隱藏的按鈕,只有當caption 屬性不為空時起效 |
true |
否 |
hoverrows |
boolean |
當為false時mouse hovering會被禁用 |
false |
是 |
jsonReader |
array |
描述json 資料格式的陣列 |
否 |
|
lastpage |
integer |
只讀屬性,定義了總頁數 |
0 |
否 |
lastsort |
integer |
只讀屬性,定義了最後排序列的索引,從0開始 |
0 |
否 |
loadonce |
boolean |
如果為ture則資料只從伺服器端抓取一次,之後所有操作都是在客戶端執行,翻頁功能會被禁用 |
false |
否 |
loadtext |
string |
當請求或者排序時所顯示的文字內容 |
Loading.... |
否 |
loadui |
string |
當執行ajax請求時要幹什麼。disable禁用ajax執行提示;enable預設,當執行ajax請求時的提示; block啟用Loading提示,但是阻止其他操作 |
enable |
是 |
multikey |
string |
只有在multiselect設定為ture時起作用,定義使用那個key來做多選。shiftKey,altKey,ctrlKey |
空值 |
是 |
multiboxonly |
boolean |
只有當multiselect = true.起作用,當multiboxonly 為ture時只有選擇checkbox才會起作用 |
false |
是 |
multiselect |
boolean |
定義是否可以多選 |
false |
否 |
multiselectWidth |
integer |
當multiselect為true時設定multiselect列寬度 |
20 |
否 |
page |
integer |
設定初始的頁碼 |
1 |
是 |
pagerpos |
string |
指定分頁欄的位置 |
center |
否 |
pgbuttons |
boolean |
是否顯示翻頁按鈕 |
true |
否 |
pginput |
boolean |
是否顯示跳轉頁面的輸入框 |
true |
否 |
pgtext |
string |
當前頁資訊 |
是 |
|
prmNames |
array |
Default valuesprmNames: {page:“page”,rows:“rows”, sort: “sidx”,order: “sord”, search:“_search”, nd:“nd”, npage:null} 當引數為null時不會被髮到伺服器端 |
none |
是 |
postData |
array |
此陣列內容直接賦值到url上,引數型別:{name1:value1…} |
空array |
是 |
reccount |
integer |
只讀屬性,定義了grid中確切的行數。通常情況下與records屬性相同,但有一種情況例外,假如rowNum=15,但是從伺服器端返回的記錄數是20,那麼records值是20,但reccount值仍然為15,而且表格中也只顯示15條記錄。 |
0 |
否 |
recordpos |
string |
定義了記錄資訊的位置: left, center, right |
right |
否 |
records |
integer |
只讀屬性,定義了返回的記錄數 |
none |
否 |
recordtext |
string |
顯示記錄數資訊。{0} 為記錄數開始,{1}為記錄數結束。viewrecords為ture時才能起效,且總記錄數大於0時才會顯示此資訊 |
||
resizeclass |
string |
定義一個class到一個列上用來顯示列寬度調整時的效果 |
空值 |
否 |
rowList |
array |
一個數組用來調整表格顯示的記錄數,此引數值會替代rowNum引數值傳給伺服器端。 |
[] |
否 |
rownumbers |
boolean |
如果為ture則會在表格左邊新增一列,顯示行順序號,從1開始遞增。此列名為'rn'. |
false |
否 |
rownumWidth |
integer |
如果rownumbers為true,則可以設定column的寬度 |
25 |
否 |
savedRow |
array |
只讀屬性,只用在編輯模式下儲存資料 |
空值 |
否 |
scroll |
boolean |
建立一個動態滾動的表格,當為true時,翻頁欄被禁用,使用垂直滾動條載入資料,且在首次訪問伺服器端時將載入所有資料到客戶端。當此引數為數字時,表格只控制可見的幾行,所有資料都在這幾行中載入 |
false |
否 |
scrollOffset |
integer |
設定垂直滾動條寬度 |
18 |
否 |
scrollrows |
boolean |
當為true時讓所選擇的行可見 |
false |
是 |
selarrrow |
array |
只讀屬性,用來存放當前選擇的行 |
array |
否 |
selrow |
string |
只讀屬性,最後選擇行的id |
null |
否 |
shrinkToFit |
boolean |
此屬性用來說明當初始化列寬度時候的計算型別,如果為ture,則按比例初始化列寬度。如果為false,則列寬度使用colModel指定的寬度 |
true |
否 |
sortable |
boolean |
是否可排序 |
false |
否 |
sortname |
string |
排序列的名稱,此引數會被傳到後臺 |
空字串 |
是 |
sortorder |
string |
排序順序,升序或者降序(asc or desc) |
asc |
是 |
subGrid |
boolean |
是否使用suggrid |
false |
否 |
subGridModel |
array |
subgrid模型 |
array |
否 |
subGridType |
mixed |
如果為空則使用表格的dataType |
null |
是 |
subGridUrl |
string |
載入subgrid資料的url,jqGrid會把每行的id值加到url中 |
空值 |
是 |
subGridWidth |
integer |
subgrid列的寬度 |
20 |
否 |
toolbar |
array |
表格的工具欄。陣列中有兩個值,第一個為是否啟用,第二個指定工具欄位置(相對於body layer),如:[true,”both”] 。工具欄位置可選值:“top”,”bottom”, “both”. 如果工具欄在上面,則工具欄id為“t_”+表格id;如果在下面則為 “tb_”+表格id;如果只有一個工具欄則為 “t_”+表格id |
[false,''] |
否 |
totaltime |
integer |
只讀屬性,計算載入資料的時間。目前支援xml跟json資料 |
0 |
否 |
treedatatype |
mixed |
資料型別,通常情況下與datatype相同,不會變 |
null |
否 |
treeGrid |
boolean |
啟用或者禁用treegrid模式 |
false |
否 |
treeGridModel |
string |
treeGrid所使用的方法 |
Nested |
否 |
treeIcons |
array |
樹的圖示,預設值:{plus:'ui-icon-triangle-1-e',minus:'ui-icon-triangle-1-s',leaf:'ui-icon-radio-off'} |
否 |
|
treeReader |
array |
擴充套件表格的colModel且加在colModel定義的後面 |
否 |
|
tree_root_level |
numeric |
r oot元素的級別, |
0 |
否 |
userData |
array |
從request中取得的一些使用者資訊 |
array |
否 |
userDataOnFooter |
boolean |
當為true時把userData放到底部,用法:如果userData的值與colModel的值相同,那麼此列就顯示正確的值,如果不等那麼此列就為空 |
false |
是 |
viewrecords |
boolean |
是否要顯示總記錄數 |
false |
否 |
viewsortcols |
array |
定義排序列的外觀跟行為。資料格式:[false,'vertical',true].第一個引數是說,是否都要顯示排序列的圖示,false就是隻顯示 當前排序列的圖示;第二個引數是指圖示如何顯示,vertical:排序圖示垂直放置,horizontal:排序圖示水平放置;第三個引數指單擊功 能,true:單擊列可排序,false:單擊圖示排序。說明:如果第三個引數為false則第一個引數必須為ture否則不能排序 |
否 |
|
width |
number |
如果設定則按此設定為主,如果沒有設定則按colModel中定義的寬度計算 |
none |
否 |
xmlReader |
array |
對xml資料結構的描述 |
否 |
Jqgrid學習 -------ColModel API
ColModel 是jqGrid裡最重要的一個屬性,設定表格列的屬性。
屬性 |
資料型別 |
備註 |
預設值 |
align |
string |
left, center, right. |
left |
classes |
string |
設定列的css。多個class之間用空格分隔,如:'class1 class2' 。表格預設的css屬性是ui-ellipsis |
empty string |
datefmt |
string |
”/”, ”-”, and ”.”都是有效的日期分隔符。y,Y,yyyy 年YY, yy 月m,mm for monthsd,dd 日. |
ISO Date (Y-m-d) |
defval |
string |
查詢欄位的預設值 |
空 |
editable |
boolean |
單元格是否可編輯 |
false |
editoptions |
array |
編輯的一系列選項。{name:’__department_id’,index:’__department_id’,width:200,editable:true,edittype:’select’,editoptions: {dataUrl:”${ctx}/admin/deplistforstu.action”}},這個是演示動態從伺服器端獲取資料。 |
empty |
editrules |
array |
編輯的規則{name:’age’,index:’age’, width:90,editable:true,editrules: {edithidden:true,required:true,number:true,minValue:10,maxValue:100}},設定 年齡的最大值為100,最小值為10,而且為數字型別,並且為必輸欄位。 |
empty |
edittype |
string |
可以編輯的型別。可選值:text, textarea, select, checkbox, password, button, image and file. |
text |
fixed |
boolean |
列寬度是否要固定不可變 |
false |
formoptions |
array |
對於form進行編輯時的屬性設定 |
empty |
formatoptions |
array |
對某些列進行格式化的設定 |
none |
formatter |
mixed |
對列進行格式化時設定的函式名或者型別 {name:’sex’,index:’sex’, align:’center’,width:60,editable:true,edittype:’select’,editoptions: {value:’0:待定;1:男;2:女’},formatter:function(cellvalue, options, rowObject){ |
none |
hidedlg |
boolean |
是否顯示或者隱藏此列 |
false |
hidden |
boolean |
在初始化表格時是否要隱藏此列 |
false |
index |
string |
索引。其和後臺互動的引數為sidx |
empty |
jsonmap |
string |
定義了返回的json資料對映 |
none |
key |
boolean |
當從伺服器端返回的資料中沒有id時,將此作為唯一rowid使用只有一個列可以做這項設定。如果設定多於一個,那麼只選取第一個,其他被忽略 |
false |
label |
string |
如果colNames為空則用此值來作為列的顯示名稱,如果都沒有設定則使用name 值 |
none |
name |
string |
表格列的名稱,所有關鍵字,保留字都不能作為名稱使用包括subgrid, cb and rn. |
Required |
resizable |
boolean |
是否可以被resizable |
true |
search |
boolean |
在搜尋模式下,定義此列是否可以作為搜尋列 |
true |
searchoptions |
array |
設定搜尋引數 |
empty |
sortable |
boolean |
是否可排序 |
true |
sorttype |
string |
用在當datatype為local時,定義搜尋列的型別,可選值:int/integer - 對integer排序float/number/currency - 排序數字date - 排序日期text - 排序文字 |
text |
stype |
string |
定義搜尋元素的型別 |
text |
surl |
string |
搜尋資料時的url |
empty |
width |
number |
預設列的寬度,只能是象素值,不能是百分比 |
150 |
xmlmap |
string |
定義當前列跟返回的xml資料之間的對映關係 |
none |
unformat |
function |
‘unformat’單元格值 |
null |
Jqgrid學習 -------資料
jqGrid可支援的資料型別:xml、json、jsonp、local or clientSide、xmlstring、jsonstring
、script、function (…)。
Json資料
需要定義jsonReader來跟伺服器端返回的資料做對應,其預設值:
· jsonReader : {
· root: "rows",
· page: "page",
· total: "total",
· records: "records",
· repeatitems: true,
· cell: "cell",
· id: "id",
· userdata: "userdata",
· subgrid: {root:"rows",
· repeatitems: true,
· cell:"cell"
· }
這樣伺服器端返回的資料格式:
· {
· total: "xxx",
· page: "yyy",
· records: "zzz",
· rows : [
· {id:"1", cell:["cell11", "cell12", "cell13"]},
· {id:"2", cell:["cell21", "cell22", "cell23"]},
· ...
· ]
· }
jsonReader的屬性
total |
總頁數 |
page |
當前頁 |
records |
查詢出的記錄數 |
rows |
包含實際資料的陣列 |
id |
行id |
cell |
當前行的所有單元格 |
自定義:
· jQuery("#gridid").jqGrid({
· ...
· jsonReader : {
· root:"invdata",
· page: "currpage",
· total: "totalpages",
· records: "totalrecords",
· cell: "invrow"
· },
· ...
· });
· totalpages: "xxx",
· currpage: "yyy",
· totalrecords: "zzz",
· invdata : [
· {id:"1", invrow:["cell11", "cell12", "cell13"]},
· {id:"2", invrow:["cell21", "cell22", "cell23"]},
· ...
· ]
repeatitems
指明每行的資料是可以重複的,如果設為false,則會從返回的資料中按名字來搜尋元素,這個名字就是colModel中的名字
· jsonReader : {
· root:"invdata",
· page: "currpage",
· total: "totalpages",
· records: "totalrecords",
· repeatitems: false,
· id: "0"
· }
· totalpages: "xxx",
· currpage: "yyy",
· totalrecords: "zzz",
· invdata : [
· {invid:"1",invdate:"cell11", amount:"cell12", tax:"cell13", total:"1234", note:"somenote"},
· {invid:"2",invdate:"cell21", amount:"cell22", tax:"cell23", total:"2345", note:"some note"},
· ...
· ]
此例中,id屬性值為“invid”。
一旦當此屬性設為false時,我們就不必把所有在colModel定義的name值都賦值。因為是按name來進行搜尋元素的,所以他的排序也不是按colModel中指定的排序結果。
使用者資料(user data)
在某些情況下,我們需要從伺服器端返回一些引數但並不想直接把他們顯示到表格中,而是想在別的地方顯示,那麼我們就需要用到userdata標籤
· jsonReader: {
· ...
· userdata: "userdata",
· ...
· }
· {
· total: "xxx",
· page: "yyy",
· records: "zzz",
· userdata: {totalinvoice:240.00, tax:40.00},
· rows : [
· {id:"1", cell:["cell11", "cell12", "cell13"]},
· {id:"2", cell:["cell21", "cell22", "cell23"]},
· ...
· ]
· }
在客戶端我們可以有下面兩種方法得到這些額外資訊:
1. jQuery("grid_id").getGridParam('userData')
2. jQuery("grid_id").getUserData()
3. jQuery("grid_id").getUserDataItem( key )
Jqgrid學習 -------事件
· var lastSel;
· jQuery("#gridid").jqGrid({
· ...
· onSelectRow: function(id){
· if(id && id!==lastSel){
· jQuery('#gridid').restoreRow(lastSel);
· lastSel=id;
· }
· jQuery('#gridid').editRow(id, true);
· },
· ...
· })
事件 |
引數 |
備註 |
afterInsertRow |
rowidrowdatarowelem |
當插入每行時觸發。rowid插入當前行的id;rowdata插入行的資料,格式 |