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

时间:2011-07-30 07:13:43

标签: jqgrid

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

1 个答案:

答案 0 :(得分:10)

我为你准备了the small demo,它保留了行选择。在演示中,我重写了selectionPreserver的代码,用于reloadGrid使用时具有其他参数:$("#list").trigger("reloadGrid", [{current:true}]);。有关详细信息,请参阅the answer

该演示将当前选择保存在onSortCol事件处理程序中并将其恢复到loadComplete内:

onSortCol: function () {
    saveSelection.call(this);
},
loadComplete: function () {
    restoreSelection.call(this);
}

您如何看待用法非常简单,您可以将其集成到您的代码中。 saveSelectionrestoreSelection的实施如下:

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;
    };