如何更改 extjs 中特定列中的所有值?

Posted

技术标签:

【中文标题】如何更改 extjs 中特定列中的所有值?【英文标题】:How can I change all the values in a specific column in extjs? 【发布时间】:2013-07-26 20:50:37 【问题描述】:

我有一个带有列的可编辑网格面板,当我按下 applyToAll 按钮时,我想将列中的每个单独值更改为相同的值。似乎没有任何 api 调用使我能够获取列中的所有值,甚至是网格面板中的所有值。

//Model that defines my column named fileName
var colModel = new Ext.grid.ColumnModel([
    header:'File Name', 
    dataIndex:'fileName'
    
]);

// Editable grid panel:
var myGrid = new Ext.grid.EditorGridPanel(          
    store: store,
    colModel: colModel,
    clicksToEdit: 1,
    autoWidth: true,
    autoHeight: true
);

// Button that changes all the column names
var applyToAll = new Ext.Button(
  text: "Apply to All",
  handler: function()
    var record = myGrid.getSelectionModel().getSelected();

    //Change the values of the column here somehow.

  
);

//Form which holds everything
var gridForm = new Ext.FormPanel(
  id: 'mainForm',
  frame: true,
  items: [
    columnWidth: 0.6,
    layout: 'fit',
    items: [myGrid],
    buttons: [applyToAll]
 );

当我单击 applyToAll 按钮时,如何更改列中的所有值?

【问题讨论】:

【参考方案1】:

要知道选择了哪个单元格,请使用 CellSelection 模型

var myGrid = new Ext.grid.EditorGridPanel(          
    // ...
    selModel: new Ext.grid.CellSelectionModel(),
    // ...
);

然后就可以调用store的每条记录,改变需要的值:

// Button that changes all the column names
var applyToAll = new Ext.Button(
    text: "Apply to All",
    handler: function()
        var record = myGrid.getSelectionModel().getSelected();
        var row = myGrid.getSelectionModel().getSelectedCell()[0];
        var col = myGrid.getSelectionModel().getSelectedCell()[1];
        var column_name = myGrid.getColumnModel().getColumnAt(col).dataIndex;


        myGrid.getStore().each(function(rec)
            rec.set(column_name, myGrid.getStore().getAt(row).get(column_name));
        );
    
);

【讨论】:

【参考方案2】:

我最终做了什么:

var myGrid = new Ext.grid.EditorGridPanel(
  //...
  //I needed RowSelectionModel for another portion of my code
  selModel: new Ext.grid.RowSelectionModel()
  //...
);

var applyToAll = new Ext.Button(
  text: "Apply to All",
  handler: function()
    var record = myGrid.getSelectionModel().getSelected();
    myGrid.stopEditing();

    var gridStore = myGrid.getStore();
    var records = gridStore.getRange(0, gridStore.getTotalCount());

    for(var ii=0; ii<records.length; ii++)
      var curRecord = records[ii];
      curRecord.set('testCell', record.get('testCell'));
    

    gridStore.removeAll(true);
    gridStore.add(records);

    myGrid.startEditing(0, 0);
  
);

【讨论】:

以上是关于如何更改 extjs 中特定列中的所有值?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新python中熊猫数据框特定列中的所有行?

如何更改 APEX 5.1 中的单行值?

extjs 4 如何更改网格上显示的列下拉列表的顺序

检查列中的所有值是不是都属于特定组

如果列中的值小于特定值,如何转到csv文件中的特定列并打印整行

如何在 ExtJs 中的回调函数后更改隐藏值