1

列のある編集可能なグリッド パネルがあり、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 ボタンをクリックしたときに列のすべての値を変更するにはどうすればよいですか?

4

2 に答える 2

3

どのセルが選択されているかを知るには、CellSelection モデルを使用してください

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

次に、ストアの各レコードを呼び出して、必要な値を変更できます。

// 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));
        });
    }
});
于 2013-07-26T23:07:20.903 に答える
0

私がやったこと:

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);
  }
});
于 2013-07-29T14:53:58.893 に答える