如何在jqGrid上突出显示客户端排序后最后选定的行?

如何在jqGrid上突出显示客户端排序后最后选定的行?,jqgrid,Jqgrid,我有一个基于jqGrid的应用程序,我在grid选项中使用loadonce:true,在colModel中使用sortable:true,sorttype:'text,允许在数据网格上进行客户端排序。但是,我发现,一旦数据网格被重新排序,最后选择的行将不再突出显示。我的问题是,如何使选定的行在数据调用过程中保持高亮显示?我为您准备了保留行选择的选项。在演示中,我重写了在重新加载网格的情况下使用的代码,该代码具有额外的参数:$(“#list”).trigger(“重新加载网格”,“当前:true}

我有一个基于jqGrid的应用程序,我在grid选项中使用
loadonce:true
,在
colModel
中使用
sortable:true,sorttype:'text
,允许在数据网格上进行客户端排序。但是,我发现,一旦数据网格被重新排序,最后选择的行将不再突出显示。我的问题是,如何使选定的行在数据调用过程中保持高亮显示?

我为您准备了保留行选择的选项。在演示中,我重写了在重新加载网格的情况下使用的代码,该代码具有额外的参数:
$(“#list”).trigger(“重新加载网格”,“当前:true}”)。有关详细信息,请参阅

演示将当前选择保存在
onSortCol
事件处理程序中,并将其还原到
loadComplete
中:

onSortCol: function () {
    saveSelection.call(this);
},
loadComplete: function () {
    restoreSelection.call(this);
}
您如何看待这个用法非常简单,您可以将它集成到代码中。
saveSelection
restoreseselection
的实现如下:

var lastSelArrRow = [],
    lastScrollLeft = 0,
    lastSelRow = null,
    saveSelection = function () {
        var $grid = $(this);
        lastSelRow = $grid.jqGrid('getGridParam', 'selrow');
        lastSelArrRow = $grid.jqGrid('getGridParam', 'selrow');
        lastSelArrRow = lastSelArrRow ? $.makeArray(lastSelArrRow) : null;
        lastScrollLeft = this.grid.bDiv.scrollLeft;
    },
    restoreSelection = function () {
        var p = this.p,
            $grid = $(this);

        p.selrow = null;
        p.selarrrow = [];
        if (p.multiselect && lastSelArrRow && lastSelArrRow.length > 0) {
            for (i = 0; i < lastSelArrRow.length; i++) {
                if (lastSelArrRow[i] !== lastSelRow) {
                    $grid.jqGrid("setSelection", lastSelArrRow[i], false);
                }
            }
            lastSelArrRow = [];
        }
        if (lastSelRow) {
            $grid.jqGrid("setSelection", lastSelRow, false);
            lastSelRow = null;
        }
        this.grid.bDiv.scrollLeft = lastScrollLeft;
    };
var lastSelArrRow=[],
lastScrollLeft=0,
lastSelRow=null,
saveSelection=函数(){
var$grid=$(这是);
lastSelRow=$grid.jqGrid('getGridParam','selrow');
lastSelArrRow=$grid.jqGrid('getGridParam','selrow');
LastSelarrow=LastSelarrow?$.makeArray(LastSelarrow):空;
lastScrollLeft=this.grid.bDiv.scrollLeft;
},
restoreSelection=函数(){
var p=这个.p,
$grid=$(此项);
p、 selrow=null;
p、 selarrrow=[];
if(p.multiselect&&lastSelArrRow&&lastSelArrRow.length>0){
对于(i=0;i
亲爱的Oleg,感谢您的详细回答!太棒了!根据您的评论,我发现根本原因是网格将被重新加载,即使排序是在客户端执行的,因此选择应该以编程方式恢复。