Вывести выбранные строки на вершину из Jqgrid - PullRequest
2 голосов
/ 14 ноября 2011

Я использую jqgrid в режиме 'multiselect' и без нумерации страниц.Когда пользователь выбирает отдельные записи с помощью щелчка мыши, могу ли я как-нибудь перенести эти выбранные записи в верхнюю часть таблицы?

Заранее благодарен за помощь.

Ответы [ 2 ]

11 голосов
/ 15 ноября 2011

После небольшого обсуждения с вами в комментариях я мог бы переформулировать ваш вопрос так: «Как можно реализовать сортировку по множеству столбцов?»

Поиск вопроса очень интересен, поэтому я потратил некоторое время и мог бы предложить решение в случае jqGrid, который содержит локальные данные (datatype, который не является «xml» или «json» или имеет параметр «loadonce: true») ).

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

enter image description here

Реализация состоит из двух частей:

  1. Делать выбор как часть локальных данных. В качестве бонуса выбор будет удерживаться при поиске локальных данных . Эта функция интересна независимо от сортировки по множеству столбцов.
  2. Реализация сортировки по множественному столбцу.

Чтобы реализовать выбор удержания, я предлагаю расширить локальный параметр 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;
};

ОБНОВЛЕНО : Демонстрация содержит немного улучшенного кода, основанного на той же идее.

0 голосов
/ 04 октября 2012

Если у вас есть идентификаторы строк, вы можете выполнить специальную сортировку на стороне сервера, используя следующую команду, например, для MySQL:

Select a,b,c
FROM t
ORDER BY FIND_IN_SET(yourColumnName, "5,10,44,29") DESC

или

ORDER BY FIELD(yourColumnName, "5") DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...