ExtJs Grid分頁時,默認情況下每頁的序號都是從1起始的,這往往不符合我們的習慣。這里實現了序號的自動增加。
先看效果圖:


實現步驟如下:
1、定義全局變量。
var record_start = 0;
2、Grid的columns部分的定義。
columns : [new Ext.grid.RowNumberer({
header : "序號",
width : 40,
renderer:function(value,metadata,record,rowIndex){
return record_start + 1 + rowIndex;
}
}), {
header : "項目編號",
width : 50,
sortable : false,
dataIndex : "projectNumber"
}, {
header : "項目名稱",
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}頁",
firstText:"首頁",
prevText:"上一頁",
nextText:"下一頁",
lastText:"尾頁",
refreshText:"刷新",
displayMsg : "當前顯示記錄從 {0} - {1} 總 {2} 條記錄",
emptyMsg : "沒有相關記錄!",
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});
}
})
說明:
1、全局變量record_start用于記錄列表開始的數據點,如第一頁,那么為0,如第二頁,那么為8,這里分頁pagesize設置為了8
2、分頁中doLoad這部分的代碼來自于Ext.PagingToolbar的doLoad方法,PagingToolbar在分頁發生變化時會調用這個方法來重新load數據,只是多了個對全局變量進行賦值的步驟,為的就是在分頁發生變化時,記錄傳遞給Url的參數start的值。
3、在columns中實例化Ext.grid.RowNumberer時,重寫了renderer方法,其實之所以這樣做的原因,大家看一下Ext.grid.RowNumberer源碼中的renderer方法就知道了,就是根據行號+1來設置序號的,這里我們改這個方法,是為了得到 行號+分頁變化時得到的start參數的值+1 的值,這樣就能夠正確得到序號結合分頁的數據了。
注意:
以上代碼使用的是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});
}