Пользовательская сортировка jqgrid для локальных данных в другом столбце - PullRequest
1 голос
/ 09 апреля 2011

У меня есть jqgrid, где тип данных является локальным. Автоматическая сортировка работает нормально для каждого столбца. Я хочу знать, возможно ли отсортировать другой столбец на основе другого столбца. Чтобы объяснить это лучше, давайте предположим, что у меня есть три столбца OrderNumber, Address, Phone и скрытый столбец с именем State. При щелчке по столбцу Address я на самом деле хочу отсортировать, как если бы столбец State был бы выбранным.

Я пытаюсь сделать это на событии onSortCol, я хочу что-то вроде:

onSortCol: function (index, iCol, sortorder) {

     if(index === "Address"){
         //CHANGE SORTED COLUMN TO STATE AND MAKE THE SORT              
     }
},

Ответы [ 2 ]

6 голосов
/ 09 апреля 2011

Если вы работаете с удаленными данными (datatype:'json' или datatype:'xml'), вы можете легко реализовать любой вид сортировки.Поэтому я предполагаю, что вы имеете в виду jqGrid с локальными данными в вашем вопросе.В этом случае я бы рекомендовал вам использовать параметр sorttype внутри colModel, определенный как функция.

Для столбца Address можно определить свойство sorttype, которое выглядит следующим образом:

sorttype: function(cellValue, rowObject) {
    return rowObject.State;
}

или как этот:

sorttype: function(cellValue, rowObject) {
    return rowObject.State + "_" + cellValue;
}

Параметр cellValue содержит содержимое ячейки, которая будет использоваться в операции сравнения для сортировки сетки.rowObject - это объект, представляющий всю строку, имеющую cellValue.Возврат другого значения как cellValue из функции sorttype будет означать, что восстановленное значение будет использоваться в операциях сравнения вместо cellValue.

. В первом примереРеализация sorttype (см. Выше) сортировка по столбцу Address будет выполняться на основе содержимого столбца с именем State.Во втором примере строки, имеющие одинаковое состояние, будут дополнительно отсортированы по адресу.

Здесь вы можете посмотреть небольшую демонстрацию .Если щелкнуть столбец «Налог», сетка будет отсортирована по столбцу «Идентификатор», где значения идентификатора будут интерпретироваться как целое число.

0 голосов
/ 09 апреля 2011

Если бы вы выполняли сортировку на стороне сервера, вы бы просто сделали следующее:

if(sord == "Address"){
    sord = "State";
}

Вы пытались сделать то же самое для сортировки на стороне клиента:

onSortCol: function (index, iCol, sortorder) {    
    if(index === "Address"){
        index = "State";              
    } 
},
...