2

在单元格编辑中,有什么方法可以在编辑单元格时更改其编辑类型(如果满足某些条件)?

假设我有一个 colModel,它有一个字段“Description”,默认情况下将被视为输入。当我单击以在该单元格中进行编辑时,输入将与当前单元格值一起出现。现在,如果满足某些条件,我希望当用户单击该单元格进行编辑时,而不是输入一个选择出现。

我已经尝试使用 setColProp 并同时更改了 edittype 和 editoptions,但要么我没有在正确的地方这样做(我在 beforeCellEdit 事件中这样做了),要么它不起作用。

谢谢。

更新

我已尝试使用您提出的策略,但在调用该方法后,我的单元格显示输入:setColProp

var originalEditCell = $.fn.jqGrid.editCell;

    $.jgrid.extend({
        editCell: function (iRow, iCol, isStartEditing) {

            if (iCol === 4 && classEditMode) {

                $(this).jqGrid('setColProp', "ColName4", { edittype: "text" });
                var cell = $(this).find('tr:eq(' + iRow + ')').find('td[aria-describedby="gridFix_Description"]');
                cell.find('select').remove();
                cell.append($('<input />').attr('id', iRow + '_Description')
                                          .attr('name', 'Description')
                                          .attr('role', 'textbox')
                                          .width('98%')
                                          .text(""));
            }
            return originalEditCell.call(this, iRow, iCol, isStartEditing);
        }
    });

网格仍然生成一个选择。知道为什么吗?

谢谢

UPD2

抱歉,我忘记在 setColProp 方法中包含正确的 colname 变量。我在帖子中更正了这一点,以记录我如何解决这个问题,如果其他人需要它。

谢谢。

4

1 回答 1

1

您可以使用onCellSelect回调或在将被调用之前beforeSelectRow管理某些属性的动态更改的情况。问题只是在键盘导航的情况下它无济于事。 editCell

作为一种安全的解决方法,但有点棘手,我可以建议使用 jqGrid 方法的“子类化” editCell(参见此处此处等)。对应的代码片段如下

var originalEditCell = $.fn.jqGrid.editCell;

$.jgrid.extend({
editCell: function (iRow, iCol, isStartEditing) {
        // here you can do some actions before editing
        return originalEditCell.call(this, (iRow, iCol, isStartEditing);
    }
});
于 2012-12-18T18:39:11.383 回答