在jqGrid中更改版本的单元格编辑类型

时间:2012-12-18 17:19:13

标签: jquery jqgrid

在单元格编辑中,是否有任何方法可以在编辑单元格时更改单元格的编辑类型(如果满足某些条件)?

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

我尝试过使用setColProp并更改edittype和editoptions,但要么我没有在正确的位置(我在beforeCellEdit事件中做过),要么就是这样。< / p>

感谢。

UPD

我尝试使用您提议的策略,但在调用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包含正确的变量。我在帖子中纠正了这个问题,以便记录如果有人需要它我是如何解决这个问题的。

感谢。

1 个答案:

答案 0 :(得分:1)

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

作为一种安全的解决方法,但有点棘手,我建议使用jqGrid方法editCell的“子类化”(请参阅​​herehere等)。相应的代码片段将是以下

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);
    }
});