ExtJs Grid分頁(yè)時(shí),默認(rèn)情況下每頁(yè)的序號(hào)都是從1起始的,這往往不符合我們的習(xí)慣。這里實(shí)現(xiàn)了序號(hào)的自動(dòng)增加。
先看效果圖:
實(shí)現(xiàn)步驟如下:
1、定義全局變量。
var record_start = 0;
2、Grid的columns部分的定義。
columns : [new Ext.grid.RowNumberer({
header : "序號(hào)",
width : 40,
renderer:function(value,metadata,record,rowIndex){
return record_start + 1 + rowIndex;
}
}), {
header : "項(xiàng)目編號(hào)",
width : 50,
sortable : false,
dataIndex : "projectNumber"
}, {
header : "項(xiàng)目名稱",
sortable : false,
dataIndex : "psName"
}, {
header : "基站名",
sortable : false,
dataIndex : "psSiteName"
}]
header : "序號(hào)",
width : 40,
renderer:function(value,metadata,record,rowIndex){
return record_start + 1 + rowIndex;
}
}), {
header : "項(xiàng)目編號(hào)",
width : 50,
sortable : false,
dataIndex : "projectNumber"
}, {
header : "項(xiàng)目名稱",
sortable : false,
dataIndex : "psName"
}, {
header : "基站名",
sortable : false,
dataIndex : "psSiteName"
}]
3、Grid 的PagingToolbar部分的定義。
bbar : new Ext.PagingToolbar({
store : grid_store,
pageSize : 8,
displayInfo : true,
beforePageText:"第",
afterPageText:"/ {0}頁(yè)",
firstText:"首頁(yè)",
prevText:"上一頁(yè)",
nextText:"下一頁(yè)",
lastText:"尾頁(yè)",
refreshText:"刷新",
displayMsg : "當(dāng)前顯示記錄從 {0} - {1} 總 {2} 條記錄",
emptyMsg : "沒(méi)有相關(guān)記錄!",
doLoad : function(start){
record_start = start;
var o = {}, pn = this.paramNames;
o[pn.start] = start;
o[pn.limit] = this.pageSize;
this.store.load({params:o});
}
})
store : grid_store,
pageSize : 8,
displayInfo : true,
beforePageText:"第",
afterPageText:"/ {0}頁(yè)",
firstText:"首頁(yè)",
prevText:"上一頁(yè)",
nextText:"下一頁(yè)",
lastText:"尾頁(yè)",
refreshText:"刷新",
displayMsg : "當(dāng)前顯示記錄從 {0} - {1} 總 {2} 條記錄",
emptyMsg : "沒(méi)有相關(guān)記錄!",
doLoad : function(start){
record_start = start;
var o = {}, pn = this.paramNames;
o[pn.start] = start;
o[pn.limit] = this.pageSize;
this.store.load({params:o});
}
})
說(shuō)明:
1、全局變量record_start用于記錄列表開(kāi)始的數(shù)據(jù)點(diǎn),如第一頁(yè),那么為0,如第二頁(yè),那么為8,這里分頁(yè)pagesize設(shè)置為了8
2、分頁(yè)中doLoad這部分的代碼來(lái)自于Ext.PagingToolbar的doLoad方法,PagingToolbar在分頁(yè)發(fā)生變化時(shí)會(huì)調(diào)用這個(gè)方法來(lái)重新load數(shù)據(jù),只是多了個(gè)對(duì)全局變量進(jìn)行賦值的步驟,為的就是在分頁(yè)發(fā)生變化時(shí),記錄傳遞給Url的參數(shù)start的值。
3、在columns中實(shí)例化Ext.grid.RowNumberer時(shí),重寫(xiě)了renderer方法,其實(shí)之所以這樣做的原因,大家看一下Ext.grid.RowNumberer源碼中的renderer方法就知道了,就是根據(jù)行號(hào)+1來(lái)設(shè)置序號(hào)的,這里我們改這個(gè)方法,是為了得到 行號(hào)+分頁(yè)變化時(shí)得到的start參數(shù)的值+1 的值,這樣就能夠正確得到序號(hào)結(jié)合分頁(yè)的數(shù)據(jù)了。
注意:
以上代碼使用的是Ext2.x版本,如果你使用的是Ext3.x需要做以下的修改:
doLoad方法中把this.paramNames改為this.getParams()
doLoad : function(start){
record_start = start;
var o = {}, pn = this.getParams();
o[pn.start] = start;
o[pn.limit] = this.pageSize;
this.store.load({params:o});
}
record_start = start;
var o = {}, pn = this.getParams();
o[pn.start] = start;
o[pn.limit] = this.pageSize;
this.store.load({params:o});
}
你已經(jīng)知道當(dāng)前的頁(yè)數(shù)和每頁(yè)的數(shù)據(jù)數(shù),算一下不就ok了.
其實(shí),可以通過(guò)record.store.lastOptions.params.start來(lái)得到record_start。
Ext.grid.RowNumberer = Ext.extend(Ext.grid.RowNumberer, {
renderer:function(value, cellmeta, record, rowIndex, columnIndex, store){
return store.lastOptions.params.start + rowIndex + 1;
}
});