jqGrid: есть ли событие, когда столбцы переупорядочиваются? - PullRequest
6 голосов
/ 19 ноября 2009

Я использую функцию переупорядочения столбцов в jqGrid

$grid = jQuery("#list").jqGrid({
    sortable:true,
    ...
});

Есть ли событие, которое возникает после переупорядочения столбцов? Если есть, то не вижу!

Заранее спасибо

Ответы [ 7 ]

9 голосов
/ 13 апреля 2011

В grid.jqueryui.js (jqGrid v3.8.2) есть вызов в update () для ts.p.sortable.update (), как обсуждалось на доске объявлений jqGrid , поэтому:

jQuery('#gridId').jqGrid({
    ...,
    sortable: { update: function(permutation) {
        alert('save permutation somewhere');
    },
    ...
});

Однако, обратите внимание, что массив, переданный вашему обратному вызову, будет относительно текущего порядка столбцов. Другими словами, сохранение массива как есть после перемещения нескольких столбцов не даст желаемых результатов.

Я должен был сделать что-то вроде этого:

var defaultColNames = [ 'Alpha', 'Beta', 'Gamma' ];
var defaultColModel = [
    { name: 'alpha', index: 'alpha' },
    { name: 'beta', index: 'beta' },
    { name: 'gamma', index: 'gamma' }
];

jQuery('#gridId').jqGrid({
    ...,
    colNames: defaultColNames,
    colModel: defaultColModel,
    sortable: { update: function(relativeColumnOrder) {
        var grid = jQuery('#gridId');

        var defaultColIndicies = [];
        for( var i=0; i<defaultColModel.length; i++ ) {
            defaultColIndicies.push(defaultColModel[i].name);
        }

        if( grid.getGridParam('treeGrid') ) {
            // tree grid mode adds 5 extra columns
            defaultColIndicies = defaultColIndicies.concat(['level','parent','isLeaf','expanded','loaded']);
        }

        var columnOrder = [];
        var currentColModel = grid.getGridParam('colModel');
        for( var j=0; j<relativeColumnOrder.length; j++ ) {
            columnOrder.push(defaultColIndicies.indexOf(currentColModel[j].name));
        }

        // columnOrder now contains exactly what's necessary to pass to to remapColumns
        // now save columnOrder somewhere
        globalColumnOrder = columnOrder;
    },
    ...
});

// grab saved column order from cookie or something
var globalColumnOrder = [0,1,2];

// append to array if tree grid enabled
if( jQuery('#gridId').getGridParam('treeGrid') ) {
    // tree grid mode adds 5 extra columns
    for( var k=defaultColNames.length; k<(defaultColNames.length+5); k++ ) {
        globalColumnOrder.push(k);
    }
}

// restore column order
jQuery('#gridId').jqGrid('remapColumns', globalColumnOrder, true, false);
3 голосов
/ 12 февраля 2011

Найдя после прочтения ответа мистера В. и немного поэкспериментировав, есть лучший способ сделать что-то:

$("#gbox_" + gridid).bind("sortstop", function(){
    // you can even get the current permutation!
    // Yes, it looks like you may be grabbing the remapColumns function.
    //    You're not, you get an array of integers back.
    grid.jqGrid("getGridParam", "remapColumns");
})

Наслаждайтесь!

2 голосов
/ 12 июля 2010

Это работает:

[Изменено]

$ ('. Ui-jqgrid-hbox table', $ ('#' + gridId) .parents ('. Ui-jqgrid-view')). Bind ("sortstop", function () {onGridColumnReordered (gridId )})

где вам нужно передать свой gridId и, конечно, создать эту функцию onGridColumnReordered.

1 голос
/ 19 ноября 2009

Плагин demo для плагина сортируемых строк jqGrid сообщает, что можно использовать все доступные опции и события из виджета для сортировки.

Если это так, то все будет в порядке, просто используя событие обновления , которое является частью сортируемого плагина.

0 голосов
/ 10 июля 2013

используйте это

$("#list").navGrid('#pager1', { edit: true, add: true, del: true });
0 голосов
/ 15 мая 2013

Комментарий @msanjay - лучший способ делать это, и вот код, который работал для меня.

var globalvar_sortingorder;

jQuery('#gridId').jqGrid({
.......
  sortable: { update: function(relativeColumnOrder) {
                    var grid = jQuery('#gridId');
                    var columnOrder=grid.jqGrid("getGridParam", "remapColumns");
                // columnOrder now contains exactly what's necessary to pass to to remapColumns
                // now save columnOrder somewhere

            globalvar_sortingorder=columnOrder;

                    }}
....
});

Для восстановления порядка столбцов

if(getObjectFromLocalStorage("sortingorder"))   {       
jQuery('#gridId').jqGrid('remapColumns', globalvar_sortingorder, true, false);          
}
0 голосов
/ 11 марта 2013

Не будет ли это намного проще. Просто с помощью элемента ui отобразить все строки и найти их положение с помощью функции sorttable index ()?

stop: function(e, ui) {
        console.log($.map($(this).find('tr.ui-widget-content'), function(el) {
            return el.id + ' = ' + $(el).index();
        }));
        } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...