JQGrid с переупорядочиванием столбцов

У меня есть jqgrid, и я могу изменить порядок столбцов с помощью этой опции в моей JQGrid

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

Эта функция позволила мне переупорядочить ВСЕ мои столбцы. Но я хочу, чтобы некоторые столбцы были на фиксированных местах. Есть ли способ решить эту проблему?

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

Бруно


person bruno    schedule 23.02.2010    source источник


Ответы (4)


Никогда не говори никогда. jqGrid использует класс jQueryUI Sortable для выполнения функции перетаскивания столбца. http://jqueryui.com/demos/sortable/

Чтобы удалить столбец из списка сортируемых столбцов, выполните эти две команды после визуализации сетки (с sortable: true).

// disable the sortable property on your target element 
// (which was applied when jqGrid rendered the grid)
$('tr.ui-jqgrid-labels').sortable({ cancel: 'th:#element_id'});
// update the list of sortable item's, and exclude your target element
$('tr.ui-jqgrid-labels').sortable({ items: "th:not(#element_id)" });

Примечание. Это лучше всего работает, если столбцы, которые не удается сортировать, находятся у левого или правого края сетки. В противном случае вы все равно сможете повторно отсортировать другие столбцы вокруг них.

Также: убедитесь, что вы понимаете разницу между двумя вариантами сортировки (уровень сетки и уровень колмодели). В параметрах сетки «sortable: true» означает, что столбцы можно переупорядочивать с помощью перетаскивания. В параметрах colmodel «sortable: true» означает, что вы можете изменить порядок строк, щелкнув заголовок столбца. Установка для sortable значения true в параметрах сетки не будет переходить к параметрам colmodel. Однако по умолчанию для colmodel sortable установлено значение true.

person Walter Stabosz    schedule 16.09.2011
comment
Спасибо за ответ, если мне нужно обновить этот проект, я его проверю! :) - person bruno; 20.09.2011
comment
А пока вы должны хотя бы принять комментарий Уолтерса. Лучше, чем невозможно. - person Tom Halladay; 23.09.2011
comment
Можно ли применить несколько идентификаторов к приведенному выше коду для фиксации порядка для нескольких столбцов? - person Sandy505; 21.01.2012
comment
@ Sandy505: наверное, придется на себе проверить. См. jqueryui.com/demos/sortable/#option-cancel. Параметр, который вы передаете в cancel / items, является просто селектором, поэтому вам просто нужно написать селектор, который выберет все th, которые вы хотите изменить. Я предполагаю, что синтаксис будет примерно таким: $ ('tr.ui-jqgrid-labels'). Sortable ({cancel: 'th: #element_id, th: # element_id2, th: # element_id3'}); - person Walter Stabosz; 23.01.2012
comment
@TomHalladay Я думаю, вы хотели сказать, что примите комментарий Уолтера, так как я только один. - person Walter Stabosz; 25.04.2014

Теперь, в 2013 году, вы можете определить параметр «exclude» для «sortable», например:

sortable: {
    exclude: '#'+ grid[0].id +'_actions_buttons'
},
person Mistic    schedule 24.07.2013

Вы можете установить sortable для каждого столбца в colModel

colModel: [{ name: 'name', index: 'name', sortable: true },...

Ознакомьтесь с документацией, это очень полезно.

person Rigobert Song    schedule 23.02.2010
comment
если вы включите эту опцию, вы можете отсортировать таблицу по этому столбцу. Это не повлияет на мой столбец, чтобы изменить порядок столбца с позиции. Было бы неплохо, если бы я мог добавить в свою colmodel возможность отключить переупорядочение только для одного столбца ... Но спасибо. - person bruno; 23.02.2010
comment
не похоже, что это возможно с настройками jqgrid, вы можете попробовать поймать событие th click и остановить заказ для определенных столбцов - person Rigobert Song; 23.02.2010

Это невозможно в jqgrid. Я тоже долго это искал. И все, что я пробовал, провалилось.

person Community    schedule 08.06.2010