将选定的行从Jqgrid带到顶部
我在’multiselect’模式下使用jqgrid而没有分页。 当用户使用鼠标单击选择单个记录时,有什么方法可以将这些选定的记录带到网格顶部?
在此先感谢您的帮助。
在评论中与您进行小的讨论后,我可以重新设计您的问题:“如何通过多选列实现排序?”
问题发现是非常有趣的,所以我投入了一些时间,可以建议一个解决方案,如果jqGrid保存本地数据( datatype
不是’xml’或’json’或具有’loadonce:true’选项)。
首先,演示我的建议的工作演示可以在这里找到:
实施包括两部分:
- 将选择作为本地数据的一部分。 因为在本地数据的寻呼期间将保持选择的奖励。 此function非常有趣,独立于多选列的排序。
- 按多选列排序的实现。
为了实现保持选择,我建议扩展本地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; };
更新 : 该演示包含一些基于相同想法的改进代码。
如果您拥有行的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