JQGrid Выборочная сортировка - PullRequest
       0

JQGrid Выборочная сортировка

4 голосов
/ 27 октября 2011

У меня есть JQGrid, заполненный данными, работающими правильно. Функция сортировки по умолчанию работает как положено. Однако я бы хотел отсортировать по столбцу, по которому щелкнули, и по столбцу по имени; каждый раз. Я думаю, что onSortCol - это то, с чего мне следует начать, но в документации не так много о том, как отсортировать содержимое таблицы. В идеале мне бы не хотелось писать собственный алгоритм сортировки и просто как-то подключаться к API JQGrid. Все данные находятся на клиенте, и я хотел бы избежать поездки на сервер, если это вообще возможно.

Вот код, который я использую для создания сетки:

$jqGrid = $('#people_SelectedContacts').jqGrid({
    ajaxGridOptions: {
        type: "POST"
    },
    url: 'AJAX/GetContacts',
    datatype: "json",
    postData: JSON.stringify({ ID: $('#ID').val() }),
    loadonce: true,
    sortable: true,
    caption: "Selected Contacts",
    hidegrid: false,
    autowidth: true,
    rowNum: 10000,
    height: "100%",
    loadui: 'block',
    colNames: ['lecID', 'lrlID', 'mjID', 'Role', 'Name', 'Entity', 'Contact', 'D #', ''],
    colModel: [
        { name: 'LECID', hidden: true },
        { name: 'LRLID', hidden: true },
        { name: 'MJID', hidden: true },
        { name: 'RoleLookupName', index: 'RoleLookupName' },
        { name: 'FullName', index: 'FullName' },
        { name: 'Entity', index: 'Entity' },
        { name: 'ContactInformation', index: 'ContactInformation' },
        { name: 'DNumber', index: 'DNumber' },
        { name: 'Remove', sortable: false, width: 25 }
    ],
    jsonReader: {
        root: 'ReturnValues.Contacts',
        repeatitems: false
    },
    beforeProcessing: function (data, status, xhr) {
        if (!data.ReturnValues.Contacts) {
            data.ReturnValues.Contacts = new Array();
        }
        $.each(data.ReturnValues.Contacts, function (index, value) {
            value.Entity = FormatAddress(value);
            value.ContactInformation = FormatContact(value);
            value.DNumber = FormatDocket(value);
        });
    },
    gridComplete: function () {
        var ids = $jqGrid.jqGrid('getDataIDs');
        for (var i = 0; i < ids.length; i++) {
            removeButton = $('<span>').addClass('remove-contact jqui-button-fix');
            $jqGrid.jqGrid('setRowData', ids[i], { Remove: $('<div>').append(removeButton).html() });
        }
    },
    loadComplete: function (data) {

    },
    onSortCol: function (index, iCol, sortorder) {

    }
});

1 Ответ

8 голосов
/ 04 ноября 2011

В вашей сетке есть 5 видимых и сортируемых столбцов: «RoleLookupName», «FullName», «Entity», «ContactInformation», «DNumber». После загрузки данных сетки с сервера тип данных изменится с 'json' на 'local', что соответствует поведению параметра loadonce: true. Отныне сортировка будет работать локально. Поскольку вы не определяете свойство sorttype ни в одном столбце, будет использоваться значение по умолчанию sorttype: 'text'.

Как я понимаю, данные в столбцах «RoleLookupName», «Entity» и т. Д. Могут содержать дубликаты, поэтому вы хотите отсортировать таблицу по комбинации основного столбца сортировки (например, «RoleLookupName») и второго столбец (например, «FullName»). В случае дубликатов в главном столбце сортировки сетка все равно будет отсортирована по второму критерию из второго столбца. Для реализации поведения вы должны использовать пользовательскую сортировку. Вы можете реализовать это, используя sorttype как функцию (см. ответ ).

Идея sorttype как функции проста. sorttype должен возвращать строку или целое число, которое следует использовать вместо , содержащегося в основной ячейке. Например, вы можете определить RoleLookupName следующим образом:

{ name: 'RoleLookupName', index: 'RoleLookupName',
    sorttype: function (cell, obj) {
        return cell + '_' + obj.FullName;
    }}

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

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