1

我正在使用 jqGrid 中的行编辑工具进行内联编辑,然后将数据保存在网格中(即,对 url 使用“clientArray”)。我正在使用“onSelectRow”函数将选择行置于编辑模式。

当通过保存按钮保存行时,此逻辑工作正常,但是当在第一行仍处于编辑模式时单击另一行时,为第一行调用 saveRow 函数不会保存更改,并且行字段恢复为他们的先验值。

我已经尝试过使用和不使用“beforeSelectRow”功能。在这种情况下,如何正确保存行更改?

这是逻辑:

var iRow;

...

beforeSelectRow: function (id, e) {
    if (id != null) {
        if (iRow != null && iRow != id) {
            SaveRow();
        }
    }
    return true;
},

onSelectRow: function (id, status, e) {
    if (id != null) {
        if (iRow != null && iRow != id) {
            SaveRow();
        }
        if (iRow == null) {
            iRow = id;
            $("#GridMain").jqGrid("editRow", id, false);
            $("#RowPanel").show();
        }
    }
}

function SaveRow() {
    // Save the current row if it was being edited
    if (iRow != null) {
        $("#GridMain").jqGrid("saveRow", iRow, { url: "clientArray" });
        $("#RowPanel").hide();
        iRow = null;
    }
}
4

1 回答 1

0

你应该检查几件事:

  1. 检查 iRow 是否正确。如果调用 SaveRow 时需要保存的行仍然是可编辑的,您应该能够通过调用以下命令来获取行 ID,而无需保留全局变量: iRow = $('tr[aria-selected=true ]', $("#GridMain")).attr('id'); // 你有正确的 id 吗?

  2. 如果您使用客户端排序,请检查您是否在列模型上设置了至少一列作为键。例如,如果你有一个隐藏的 Id 列,它应该这样设置: {name: 'Id', index: 'Id', label: 'Id', editable: false, hidden: true, key: true }

另外,从我在您的代码中看到的您正在使用“#RowPanel”行来编辑值?如果是这样,您可能需要将编辑后的值发送回保存时的网格。否则,您在编辑和保存时不需要显示和隐藏任何内容。

希望这可以帮助!

于 2014-12-31T18:35:05.017 回答