ExtJs 3.2下GridPanel最下面两行不参与排序,有没有知道怎么实现的啊,因为我是通过后台增加了小计、合计,其他列默认为空,但是其他列中如果也有空值,排序后,小计、合计的顺序就乱了,可能就在中间了,有没有方法让gridpanel最后两行不参与排序的方法或者是另外的实现的方式啊,请高手帮帮忙啊extjsgridgridpanel排序

解决方案 »

  1.   

    给最后两行加上标志字段,然后重写排序算法,发现有标志字段的就直接返回相等(无论是正序还是逆序,相等都不会交换)Ext.data.Store.prototype.applySort = function() {
        var fn = function(r1,r2){//r1和r2表示行对象
            var s = this.sortInfo, f = s.field;
            var st = this.fields.get(f).sortType;
            var fn = function(r1, r2) {         
            var v1 = st(r1.data[f]), v2 = st(r2.data[f]);
            if(v1.mask || v2.mask) return 0;//如果排序的行中某一行有标志,则不交换次序
            return v1>v2?1:(v1<v2?0:1);//这是自己的排序算法,你可以按需要写
        }
        this.data.sort(s.direction, fn);
        if(this.snapshot && this.snapshot != this.data) {
            this.snapshot.sort(s.direction, fn);
        }
    }
      

  2.   

    写错了一点:
    if(r1.mask || r2.mask) return 0;//你自己测一下怎么能给最后两行加上标志并能从record对象中获取
      

  3.   


    你这只是针对sortInfo的那一行,那其余行排序怎么弄?还有你现在这样写好像不对,出不来想要的效果
      

  4.   

    //自定义排序
    Ext.data.Store.prototype.applySort = function() {
        if (this.sortInfo && !this.remoteSort) {
            var s = this.sortInfo, f = s.field;
            var st = this.fields.get(f).sortType;
            var fn = function(r1, r2) {         
                var v1 = st(r1.data[f]), v2 = st(r2.data[f]);
                if(r1.get('wareCode')=='<b>小计:</b>' || r2.get('wareCode')=='<b>小计:</b>'||r1.get('wareCode')=='<b>合计:</b>' || r2.get('wareCode')=='<b>合计:</b>'){ 
                        return 0;  
                    }
                return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
            };       
            this.data.sort(s.direction, fn);
            if(this.snapshot && this.snapshot != this.data) {
                this.snapshot.sort(s.direction, fn);
            }
        }
    };
    这样写成功了,还是谢谢你啊