После небольшого обсуждения с вами в комментариях я мог бы переформулировать ваш вопрос так: «Как можно реализовать сортировку по множеству столбцов?»
Поиск вопроса очень интересен, поэтому я потратил некоторое время и мог бы предложить решение в случае jqGrid, который содержит локальные данные (datatype
, который не является «xml» или «json» или имеет параметр «loadonce: true») ).
Прежде всего, рабочую демонстрацию, которая демонстрирует мое предложение, вы можете найти здесь :
Реализация состоит из двух частей:
- Делать выбор как часть локальных данных. В качестве бонуса выбор будет удерживаться при поиске локальных данных . Эта функция интересна независимо от сортировки по множеству столбцов.
- Реализация сортировки по множественному столбцу.
Чтобы реализовать выбор удержания, я предлагаю расширить локальный параметр data
, который хранит локальные данные, с новым логическим свойством cb
(точно такое же имя, как и имя столбца множественного выбора). Ниже вы найдете реализацию:
multiselect: true,
onSelectRow: function (id) {
var p = this.p, item = p.data[p._index[id]];
if (typeof (item.cb) === "undefined") {
item.cb = true;
} else {
item.cb = !item.cb;
}
},
loadComplete: function () {
var p = this.p, data = p.data, item, $this = $(this), index = p._index, rowid;
for (rowid in index) {
if (index.hasOwnProperty(rowid)) {
item = data[index[rowid]];
if (typeof (item.cb) === "boolean" && item.cb) {
$this.jqGrid('setSelection', rowid, false);
}
}
}
}
Чтобы сделать сортировку столбца cb (столбца с множественным выбором), я предлагаю сделать следующее:
var $grid = $("#list");
// ... create the grid
$("#cb_" + $grid[0].id).hide();
$("#jqgh_" + $grid[0].id + "_cb").addClass("ui-jqgrid-sortable");
cbColModel = $grid.jqGrid('getColProp', 'cb');
cbColModel.sortable = true;
cbColModel.sorttype = function (value, item) {
return typeof (item.cb) === "boolean" && item.cb ? 1 : 0;
};
ОБНОВЛЕНО : Демонстрация содержит немного улучшенного кода, основанного на той же идее.