【问题标题】:How to get the new row order after sort rows in jQgrid?如何在 jQgrid 中对行进行排序后获取新的行顺序?
【发布时间】:2018-01-26 14:23:27
【问题描述】:

我有以下网格定义:

$(document).ready(function () {
    $("#thegrid").jqGrid({
        url: "/ajax/questions/get/" + form_id,
        datatype: "json",
        colNames: ['id', 'grid_id', 'seq', 'type', 'text'],
        colModel: [
            {name: 'field_id', index: 'id', width: 100, editable: false, search: false},
            {name: 'grid_id', index: 'grid_id', width: 50, editable: false, search: false},
            {name: 'field_seq', index: 'seq', width: 45, editable: false, search: false},
            {name: 'type', index: 'type', width: 125, editable: false, search: false},
            {name: 'field_name', index: 'text', width: 585, search: false}
        ],
        autowidth: true,
        rowNum: 200,
        cmTemplate: {width: 300, autoResizable: true},
        iconSet: "fontAwesome",
        guiStyle: "bootstrap",
        autoResizing: {compact: true, resetWidthOrg: true},
        viewrecords: true,
        autoencode: true,
        sortable: true,
        pager: true,
        toppager: true,
        hoverrows: true,
        multiselect: true,
        multiPageSelection: false,
        rownumbers: true,
        loadonce: true,
        autoresizeOnLoad: true,
        forceClientSorting: true,
        ignoreCase: true,
        prmNames: {id: "field_id"},
        jsonReader: {id: "field_id"},
        localReader: {id: "field_id"},
        navOptions: {edit: false, add: false, search: false, del: false, refresh: true},
        pgbuttons: false,
        pginput: false,
        caption: "Questions",
        height: 100,
        editurl: '/ajax/questions/edit',
        onSelectRow:
            function () {
                // ....
            },
        loadComplete: function () {
            // ...
        }
    })
});

使用上面的代码,可以通过将行拖放到网格中的某个位置来对行进行排序。

为了保持这些更改,我在后端有一个函数,它接受一个 form_id(我将它存储在 sessionStorage 中)和一个 field_id => field_seq 数组,并在数据库级别做一些魔术。

请看下图,这是第一次加载的网格:

现在假设我将彩色行 (id: 219110) 拖放到第一行位置。这将使第一行 (id: 219110) 向下移动一行(该行之后的所有行都会发生相同的情况),然后移动的行将占据第一个位置。请参见下面的示例:

之前:

+--------+--------+-----+
| id     | gri_id | seq |
+--------+--------+-----+
| 219111 |        | 1   |
| ...    |        | ... |
| 219110 |        | 4   |
+--------+--------+-----+

之后:

+--------+--------+-----+
| id     | gri_id | seq |
+--------+--------+-----+
| 219110 |        | 1   |
| 219111 |        | 2   |
| ...    |        | ... |
+--------+--------+-----+

我需要使用 id 作为 keyseq 作为值来构建和排列,以便稍后将其传递给 AJAX 后端函数,该函数将关心存储新数据。

我如何做到这一点?

【问题讨论】:

    标签: javascript jquery jqgrid free-jqgrid


    【解决方案1】:

    您可以使用 jqGrid 的lastSelectedData 参数来获取用户之前排序和过滤的项目。旧答案:this oneanother one 提供了演示,演示了lastSelectedData 的用法。

    一般来说,jqGrid 内部包含一些 JavaScript 方法,用于对本地数据进行排序和过滤。我在the old answer 中描述了棘手的技术,它适用于旧的 jqGrid(i 版本 lastSelectedData 参数(请参阅the readme),这使得处理最后排序和过滤的本地数据变得非常容易。

    【讨论】:

    • Oleg,我对行重新排序后使用的正确事件是什么?我在看jQgrid Wiki for Events,我能看到的并且对我有一定意义的是onSortCol,但我认为不是正确的。这个想法是在我将行拖放到某个位置时立即使用来自 lastSelectedData 的值触发 AJAX 调用。
    • @ReynierPM:onSortCol 的目标是提供阻止排序请求的可能性。关于拖放的行重新排序意味着您使用了 sortableRows 方法,该方法在内部使用 jQuery UI。可以使用update 回调方法获取新订单。查看来自the answeranother old answerthe next one 的演示
    • 我无法让它工作,我创建了this fiddle。测试:如果我将任何行移动到第一个位置,那么我希望它作为lastSelectedData 上的第一项,但是我得到了初始数组。你能看看并告诉我我错过了什么吗?
    • @ReynierPM:lastSelectedData 显示基于排序标准(sortnamesortorder)的排序数据的顺序。 sortableRows 允许用户独立于任何排序标准来使用当前页面的数据。必须使用rowsrowIndex 属性来获取拖放后的行顺序(请参阅旧答案中的演示,参考我发布的)。 lastSelectedDatadata不会更改
    • 我没有关注你,我已经阅读了演示,但似乎没有一个反映我在寻找什么
    猜你喜欢
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2020-05-06
    • 2019-02-22
    • 1970-01-01
    • 2011-08-29
    相关资源
    最近更新 更多