【问题标题】:ExtJS selecting certain cell from a rowExtJS 从一行中选择某个单元格
【发布时间】:2012-04-11 15:45:49
【问题描述】:

我有一个处理程序:onCalendarEditFunc,用于编辑网格中选定的单元格。现在我有这个:

onCalendarEditFunc: function() {
        var selection = this.getView().getSelectionModel().getSelection();
        requires : [
            'Ext.grid.plugin.CellEditing',
            'Ext.grid.column.Column'
        ]



        edit = this.editing;
        console.log(this.getView().getSelectionModel().getSelection());
        edit.cancelEdit();
    //  this.store.insert(0, rec);
        edit.startEditByPosition({
            row: this.store.indexOf(selection[0]),
            column: 0
        });

    },

row: this.store.indexOf(selection[0]), 工作正常,我可以编辑选定行中的第一个单元格。但是我的行有多个列,所以我想给column: 一个值,它是所选单元格的值。

谢谢

勒隆

【问题讨论】:

  • 您知道要启动编辑器的列索引吗?
  • 不,我的想法是我有一个网格,比如 5 列,在这个网格中,我根据 SQL 查询生成行。我这样说只是为了知道行数不是静态的。因此,当用户想要更改 column3 row15 上的一些信息时,他只需单击单元格,但函数 startEditByPosition 采用两个选项,第一个选项 - 我管理的行动态获取我想截取用户选择编辑的列。

标签: dom extjs extjs4


【解决方案1】:

为了检测用户选择的确切单元格(如果您想编辑按钮功能,使所选单元格像我的情况一样可编辑),您可以执行以下操作。这就是initComponent函数的开始

initComponent: function(){

        this.editing = Ext.create('Ext.grid.plugin.CellEditing');
        Ext.apply(this, {
            title: 'Календар',
            frame: false,
            plugins : [this.editing],
            store: 'CalendarEvents',
            selModel: {
                selType: 'cellmodel'
            },

这里的重要部分是

selModel: {
          selType: 'cellmodel'
          },

然后允许您在编辑功能中使用以下语法:

editfunction: function() {
    var selection = this.view.getSelectionModel().getCurrentPosition();
    requires : [
        'Ext.grid.plugin.CellEditing',
        'Ext.grid.column.Column',
        'Ext.selection.CellModel'
    ]



    edit = this.editing;
    //console.log(this.view.getSelectionModel().getCurrentPosition().column);

    edit.cancelEdit();
//  this.store.insert(0, rec);
    edit.startEditByPosition({
        row: selection.row,
        column: selection.column
    });

},

就是这样,现在您获取所选单元格的位置并传递它,以便您可以从那里开始编辑或在函数中进行编辑:

edit.startEditByPosition({
            row: selection.row,
            column: selection.column
        });

【讨论】:

    【解决方案2】:

    试试这样的:

    edit.cancelEdit();
    edit.startEdit(selection[0] /* this basically your record */, column /* 3 for example */);
    

    【讨论】:

    • 是的,但是硬编码'3'它必须是一个变量,其值是从行中选择的列。无论如何,我找到了一个可行的解决方案,所以我会在这里发布。
    • 我把变量放在那里 - 你可以计算它。
    最近更新 更多