0

我有个问题。我正在为 jqGrid 使用单元格编辑。我不希望将其更改为内联编辑,因为我需要保持这种状态,一次只允许编辑一个单元格。

问题是我有一个字段,在被编辑后,需要强制编辑其他单元格。因此,如果用户将第一个单元格更改为某个值,我需要打开这些单元格进行编辑。

有没有办法做到这一点?我尝试过使用 .jqGrid('editCell',...),但这样我一次只能使用一个单元格。而且我不能要求必须编辑下一个单元格以强制编辑第三个和最后一个单元格,因为可能会发生用户想要单独编辑第二个单元格,这应该会导致这种行为。

有什么办法可以做到这一点?

谢谢

更新

为了更清楚地说明这一点,我将举一个例子。假设您有一张表格,列出了您附近的人拥有的汽车。它有 4 个单元格:

ID - CarCompany - 型号 - 年份

其中 ID 是一些标识字段,CarCompany 是制造汽车的公司的名称,Model 是型号的名称,Year 是年份的型号。

因此,例如,您有以下记录:

0 - 福特 - 福克斯 - 2010

1 - 凯迪拉克 - 凯雷德 - 2004

2 - 兰博基尼 - 暗黑破坏神 - 2012

车主可以换车。他们可以更改年份,这不应更改任何其他单元格(因为他们将汽车更改为当前汽车的较新版本),并且他们可以将模型更改为同一年份的另一辆。但是,如果他们从另一家公司换车,您必须更新型号和年份(假设您必须更改年份)。所以:

  • 如果您更改年份,那是您必须更改的唯一单元格
  • 如果您更改模型,那是您必须更改的唯一单元格
  • 但是,如果您更改 CarCompany,则必须编辑 Model 和 Year。
4

1 回答 1

1

如果我理解纠正您的问题,您可以使用afterSaveCell回调或其他更符合您要求的方法(请参阅此处)。您可以测试修改了哪一列并editCell显式调用以建议编辑依赖的单元格。可能您可以使用额外的自定义验证规则(参见此处)来确保用户确实将依赖单元格修改为正确的值。

更新演示展示了如何在回调editCell内部afterSaveCell调用以实现所需的行为。您将在下面找到演示代码中最重要的部分:

var carCompanyEditingMode = false;

$("#list").jqGrid({
    ...
    afterSaveCell: function (rowid, cellname, value, iRow, iCol) {
        var $this = $(this), editedColName = this.p.colModel[iCol].name;
        if (editedColName === "carCompany") {
            setTimeout(function () {
                $this.jqGrid("editCell", iRow, iCol + 1, true);
            }, 50);
            carCompanyEditingMode = true;
            return;
        }
        if (carCompanyEditingMode && editedColName === "model") {
            setTimeout(function () {
                $this.jqGrid("editCell", iRow, iCol + 1, true);
            }, 50);
            return;
        }
        if (carCompanyEditingMode && editedColName === "year") {
            carCompanyEditingMode = false;
        }
    },
    beforeSelectRow: function () {
        // don't allow editing of another row if 
        // the carCompanyEditingMode is true
        return !carCompanyEditingMode;
    },
    afterRestoreCell: function (rowid, value, iRow, iCol) {
        var $this = $(this);
        if (carCompanyEditingMode) {
            // continue editing of the same cell
            setTimeout(function () {
                $this.jqGrid("editCell", iRow, iCol, true);
            }, 50);
        }
    }

});
于 2012-12-14T13:09:24.003 回答