Javascript 将所选行从Jqgrid带到顶部
我在“multiselect”模式下使用jqgrid,没有分页。当用户使用鼠标单击选择单个记录时,是否有任何方法可以将这些选择的记录置于网格顶部Javascript 将所选行从Jqgrid带到顶部,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我在“multiselect”模式下使用jqgrid,没有分页。当用户使用鼠标单击选择单个记录时,是否有任何方法可以将这些选择的记录置于网格顶部 提前感谢您的帮助。在评论中与您进行了小讨论后,我可以重新表述您的问题:“如何实现多选列排序?” 发现的问题非常有趣,因此我投入了一些时间,并可以在jqGrid中提出一个解决方案,它包含本地数据(datatype,它不是“xml”或“json”,或者具有“loadonce:true”选项) 首先是演示我的建议的工作演示,您可以找到: 实施由两部分组成:
提前感谢您的帮助。在评论中与您进行了小讨论后,我可以重新表述您的问题:“如何实现多选列排序?” 发现的问题非常有趣,因此我投入了一些时间,并可以在jqGrid中提出一个解决方案,它包含本地数据(
datatype
,它不是“xml”或“json”,或者具有“loadonce:true”选项)
首先是演示我的建议的工作演示,您可以找到:
实施由两部分组成:
data
参数,该参数使用新的布尔属性cb
保存本地数据(与multiselect列的名称完全相同)。您可以在下面找到实现:
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
或
我很难想象这个特征。让我们使用有许多行的长网格。用户在网格中间滚动并选择行。现在,选定的行应该从当前光标位置消失并移动到顶部?如果您甚至在顶部滚动网格,而用户仍然是刚刚选择的行,那么用户将不得不向下滚动到最后选择的位置,以继续他/她的工作,这似乎不是很好。@Oleg感谢您的想法。从可用性的角度来看,我认为你是对的。但假设用户是否要根据所选行进行排序?他需要查看选择了哪些记录。因此,在这种情况下,我们不能简单地将“Sort”行为赋予“select all”列标题。我正在考虑一个单独的按钮,如“查看所选记录”。当用户单击该选项时,我可以根据网格中的复选框选择进行排序吗?(考虑根据复选框列的“真”“假”值进行排序)您能提出您的想法吗?谢谢你的帮助。谢谢。这太棒了。所以你隐藏了“selectAll”复选框并覆盖了它的行为。伟大的工作,奥列格。非常感谢您的演示,我调试了它并理解了它的工作原理getColProp的api调用对我来说是全新的,我在想如何重写列属性。这个解决方案真的很酷。感谢你的努力和宝贵的时间,奥列格。再次感谢。@山姆:不客气!关于
$grid.jqGrid('getColParam','colModel')
可以获取对colModel
参数的引用。使用$grid.jqGrid('getColProp',columnName)
可以从colModel
获取对一个项目的引用$grid.jqGrid('setColProp',columnName,modExt)
将从colModel
获取对一个项目的引用,然后调用$.extend
,它将modExt
的属性与列的属性合并。最后一行(将sorttype
设置为函数)定义了自定义排序,这在许多其他情况下都很重要。非常感谢您的解释。这很有帮助。继续努力,奥列格。谢谢。@Sam:我更新了演示,以提高网格中多行的性能。请参阅答案的更新部分。我根据这里的演示发布。再次非常感谢。我也看过你的功能要求。将希望有一个新的版本附带此功能。感谢您在调优jqgrid方面所做的努力。谢谢
ORDER BY FIELD(yourColumnName, "5") DESC