Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将所选行从Jqgrid带到顶部_Javascript_Jquery_Jqgrid - Fatal编程技术网

Javascript 将所选行从Jqgrid带到顶部

Javascript 将所选行从Jqgrid带到顶部,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我在“multiselect”模式下使用jqgrid,没有分页。当用户使用鼠标单击选择单个记录时,是否有任何方法可以将这些选择的记录置于网格顶部 提前感谢您的帮助。在评论中与您进行了小讨论后,我可以重新表述您的问题:“如何实现多选列排序?” 发现的问题非常有趣,因此我投入了一些时间,并可以在jqGrid中提出一个解决方案,它包含本地数据(datatype,它不是“xml”或“json”,或者具有“loadonce:true”选项) 首先是演示我的建议的工作演示,您可以找到: 实施由两部分组成:

我在“multiselect”模式下使用jqgrid,没有分页。当用户使用鼠标单击选择单个记录时,是否有任何方法可以将这些选择的记录置于网格顶部


提前感谢您的帮助。

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

发现的问题非常有趣,因此我投入了一些时间,并可以在jqGrid中提出一个解决方案,它包含本地数据(
datatype
,它不是“xml”或“json”,或者具有“loadonce:true”选项)

首先是演示我的建议的工作演示,您可以找到:

实施由两部分组成:

  • 作为本地数据的一部分进行选择。作为的额外功能,选择将在本地数据分页期间保持。此功能独立于multiselect列排序,非常有趣
  • 多选列排序的实现
  • 为了实现保留选择,我建议扩展local
    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