jqgrid在移动行后获取网格中的行

时间:2017-01-19 16:16:05

标签: jqgrid jquery-ui-sortable

我有一个包含3列的网格,如下所示:

col1      col2    col_sortorder
AAAA      1000    1
AAAA      1002    2
AAAA      1003    3

我使用户可以使用鼠标更改网格中的排序器。例如,移动顶部的第二行,因此网格看起来像:

col1      col2    col_sortorder
AAAA      1002    2
AAAA      1000    1
AAAA      1003    3

我通过以下方式实现了这一目标:

jQuery("#list").jqGrid('sortableRows');
jQuery("#list").bind('sortstop', function() { fun_sort(event) });

现在我想用col_sortorder的新值更新我的数据库。 函数fun_sort()由sortstop-event正确触发。 我的目的只是从网格中读取所有数据并使用forloop-index作为col_sortorder的新值,但是当我使用以下内容读取网格时:

var allRowsInGrid = $('#list').jqGrid('getGridParam','data');
for (i = 0 ; i <= allRowsInGrid.length -1; i++){
var col1 = allRowsInGrid[i].col1;
var col2 = allRowsInGrid[i].col1;
var col_sortorder = i+1; //new value for sortorder
// call ajax to update the database
}

函数getGridParam总是返回初始网格顺序,而不是在网格内移动一行后的顺序。 有人可以告诉我我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

我发现您的问题很有趣,因此我创建了演示https://jsfiddle.net/OlegKi/xw0gcjez/,演示了如何解决问题。我使用了update sortableRows回调,这与"sortupdate"事件相同(请参阅the documentation)。

$("#list").jqGrid("sortableRows", {
    update: function () {
        updateColSortorder();
        // the data of the column col_sortorder will contain
        // now sequensial values 1,2,3...
        // even the display values are still old

        // reload grid to display updated data
        var p = $grid.jqGrid("getGridParam");
        // we reset sortname to "col_sortorder" only to reload
        // with minimal visual changes for the user
        p.sortname = "col_sortorder";
        p.sortorder = "asc";
        setTimeout(function () {
            $grid.trigger("reloadGrid");
        }, 0);
    }
});

其中updateColSortorder

function updateColSortorder () {
    var rows = $grid[0].rows, localRow, i;
    for (i = 0; i < rows.length; i++) {
        if ($(rows[i]).hasClass("jqgrow")) {
            // row is a row with data. row.id is the rowid
            localRow = $grid.jqGrid("getLocalRow", rows[i].id);
            localRow.col_sortorder = i;
        }
    }
}

网格内部使用HTML表格。因此$grid[0]table的DOM,具有rows属性。每行都有id属性,依此类推。 rows集合中元素的顺序对应于行的显示顺序。