Remember (persist) the filter, sort order and current page of jqGrid

前端 未结 5 1108
面向向阳花
面向向阳花 2020-12-04 15:57

My application users asked if it were possible for pages that contain a jqGrid to remember the filter, sort order and current page of the grid (because when they click a gri

5条回答
  •  独厮守ぢ
    2020-12-04 16:34

    I was working on the same thing but also needed to get and save the column ordering. It's not simple as jqGrid.remapColumns is relative to what ever the current stat of the grid is...

    Just in case anyone finds this helpful (and I'd love to know if there is already something to do this that I missed):

    (function($){
    
    $.jgrid.extend({
    
        getColumnOrder : function ()
        {
            var $grid = $(this);
    
            var colModel = $grid[0].p.colModel;
    
            var names = [];
            $.each(colModel, function(i,n){
                var name = this.name;
                if (name != "" && name != 'subgrid')
                    names[names.length] = name;
            });
    
            return names;
            //return JSON.stringify(names);
            //$('#dbgout').val(j);
    
        },
    
    
        setColumnOrder : function (new_order)
        {
            var $grid = $(this);
    
            //var new_order = JSON.parse($('#dbgout').val());
            //new_order = ['a', 'c', 'd', 'b', 'e'];
            //              0    1    2    3    4
    
            var new_order_index = {};
    
            $.each(new_order, function(i,n){
                new_order_index[n] = i;
            });
    
            //new_order = ['a', 'c', 'd', 'b', 'e'];
            //              0    1    2    3    4
            // new_order_index a=>0 c=>1 d=>2 b=>3 e=>4
    
            var colModel = $grid[0].p.colModel;
    
            cur = [];
            $.each(colModel, function(i,n){
                var name = this.name;
                if (name != "" && name != 'subgrid')
                    cur[cur.length] = name;
            });
            //cur = ['a', 'b', 'c', 'd', 'e'];
            //        0    1    2    3    4
    
            cur_index = {};
            $.each(cur, function(i,n){
                cur_index[n] = i;
            });
    
    
            // remapColumns: The indexes of the permutation array are the current order, the values are the new order.
    
            // new_order       0=>a 1=>c 2=>d 3=>b 4=>e
            // new_order_index a=>0 c=>1 d=>2 b=>3 e=>4
    
            // cur             0=>a 1=>b 2=>c 3=>d 4=>e
            // cur_index       a=>0 b=>1 c=>2 d=>3 e=>4
    
            // permutati       0    2    3    1    4
            //                 a    c    d    b    e
            var perm = [];
            $.each(cur, function(i, name){   // 2=>b
    
                new_item = new_order[i];     // c goes here
                new_item_index = cur_index[new_item];
    
                perm[i] = new_item_index;
            });
    
            if (colModel[0].name == 'subgrid' || colModel[0].name == '')
            {
                perm.splice(0, 0, 0);
                $.each(perm, function(i,n){
                    ++perm[i]
                });
                perm[0] = 0;
            }
    
            $grid.jqGrid("remapColumns", perm, true, false);
    
        },
    
    
    
    });
    })(jQuery);
    

提交回复
热议问题