如何在DataTable的某一列上动态显示序号

如题所述

/**
* 为Dataset中的记录增加序号功能,即每条记录具有一个叫做index的字段,
* 其值为该记录在dataset中的顺序,1为第一个序号,依次为2,3...;
* 通常可以将index设置为虚字段,dataType="int",readOnly=true;
* 如果该功能使用在DataTable中,可以增加一个与index对应的列,可能也就做index;
* 1.如何分配新记录的序号
* increase方式:取当前页记录的最大序号+1;
* order方式:重新分配当前页中所有记录的序号;
* 比较:由于dataset添加记录具有before,after,begin,end四种方式,如果使用默认的end方式,
* 那么使用increase方式就可以了;如果使用其他方式,那么新增加的记录有可能不是最后一条
* 记录,使用order方式可以保证序号按照记录的顺序逐渐增大;
* 2.删除记录后序号的变动方式
* nothing方式:什么都不做;
* order方式:重新分配当前页中所有记录的序号;
* 比较:删除记录后剩下的记录的序号不是连续的了,如果希望还是连续的,可以使用order方式;
* 3.翻页后序号的分配方式
* begin方式:从1开始分配;
* order方式:按照全部记录总数方式分配,例如:pageSize=10,那么第三页从21开始分配;
* 说明:由于DataTable的rowDraggable=true时,可以拖拽row而改变record的顺序,但是这个动作
* 没有触发任何dorado事件,所以无法调用DatasetIndex.rebuild(dataset)方法重新时序号有序;
* @constructor
* @param {Dataset} ds 需要添加序号功能的Dataset
* @param {JSON} mode 序号功能的工作模式
* @param mode.insertMode [mode.insertMode="increase"] 为新记录分配序号的方式
* @param mode.deleteMode [mode.deleteMode="nothing"] 删除记录后序号的变动方式
* @param mode.pageMode [mode.pageMode="page"] 翻页后序号的分配方式
*
* @author [email protected]
* @since 2008-8-11
* @version 0.8
*/
function DatasetIndex(ds,mode){
this.dataset=ds;
ds.indexf=this;
this.minIndex=this.maxIndex=0;
this.mode=mode;
this.finalPageIndex=ds.getPageIndex();
EventManager.addDoradoEvent(ds,"afterInsert",DatasetIndex.rebuildAfterInsert);
EventManager.addDoradoEvent(ds,"afterDelete",DatasetIndex.rebuildAfterDelete);
EventManager.addDoradoEvent(ds,"afterFlushData",DatasetIndex.rebuildAfterFlush);
};
DatasetIndex.prototype={
/**
* 重新分配当前页中所有记录的序号
*/
build:function(){
var ds=this.dataset;
var s,d,i=this.getBaseIndex(),r=ds.getFirstRecord();
this.minIndex=i;
ds.disableEvents();
while (r) {
s=r.getState(); d=r.isDirty();
r.setValue("index",++i);
r.setState(s); r.setDirty(d);
r = r.getNextRecord();
}
ds.enableEvents();
this.maxIndex=i;
},
/**
温馨提示:答案为网友推荐,仅供参考
相似回答