将选定的行从Jqgrid带到顶部

时间:2011-11-14 15:26:16

标签: javascript jquery jqgrid

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

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:11)

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

问题发现非常有趣所以我投入了一些时间并且可以在jqGrid的情况下建议一个解决方案来保存本地数据(datatype不是'xml'或'json'或者'loadonce:true '选项)。

首先,演示我的建议的工作演示可以找到here

enter image description here

实施包括两部分:

  1. 将选择作为本地数据的一部分。作为的奖励,在本地数据的分页期间将保持选择。此功能非常有趣,与多选列的排序无关。
  2. 按多选列排序的实现。
  3. 为了实现保持选择,我建议扩展本地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;
    };
    

    更新The demo包含基于相同想法的一些改进代码。

答案 1 :(得分:0)

如果您拥有行的ID,则可以使用以下命令对服务器端进行特殊排序: MySQL的:

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

ORDER BY FIELD(yourColumnName, "5") DESC