将选定的行从Jqgrid带到顶部

Sam*_*Sam 2 javascript jquery jqgrid

我在'multiselect'模式下使用jqgrid而没有分页.当用户使用鼠标单击选择单个记录时,有什么方法可以将这些选定的记录带到网格顶部?

在此先感谢您的帮助.

Ole*_*leg 11

在评论中与您进行小的讨论后,我可以重新表达您的问题:"如何通过多选列实现排序?"

问题发现是非常有趣的,所以我花了一些时间,并建议一个解决方案,如果jqGrid保存本地数据(datatype不是'xml'或'json'或具有'loadonce:true'选项).

首先,演示我的建议的工作演示可以在这里找到:

在此输入图像描述

实施包括两部分:

  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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要使"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;
};
Run Code Online (Sandbox Code Playgroud)

更新:该演示包含一些基于相同想法的改进代码.