Bien dans ExtJS 3, j'ai utilisé le code suivant:
grid.getColumnModel().findColumnIndex("Tasks")
J'ai essayé de le trouver sur les documents d'api, mais pas de chance … alors, comment est-il possible que je puisse trouver l'index de colonne de la grille par DataIndex de la colonne ou le nom d'en-tête de cette colonne.
Je suppose que vous devriez trouver l'index en itérant via grid.columns
array et en comparant la propriété dataIndex
de chaque colonne.
Exemple:
var findColumnIndex = function(columns, dataIndex) { var index; for (index = 0; index < columns.length; ++index) { if (columns[index].dataIndex == dataIndex) { break; } } return index == columns.length ? -1 : index; } console.log(findColumnIndex(grid.columns, 'Task')); console.log(findColumnIndex(grid.columns, 'Something'));
Vous pouvez utiliser la requête du composant:
var fname = grid.down('[dataIndex=firstname]');
Cela a pris du temps pour fonctionner – il ne semble pas y avoir d'exemple dans les documents. 😉
function getColumnIndex(grid, dataIndex) { gridDataIndices = Ext.Array.pluck(grid.columns, 'dataIndex'); return Ext.Array.indexOf(gridDataIndices, desireDataIndex); }
A répondu dans les forums sencha
var gridColumns = grid.headerCt.getGridColumns(); for (var i = 0; i < gridColumns.length; i++) { if (gridColumns[i].dataIndex == 'yourdataIndex') { alert(i); } }
Component Query peut être un peu lent et ne garantit qu'un seul résultat. Il est un peu plus rapide d'itérer sur le tableau des colonnes qui appartiennent à la grille.
Voici une fonction d'utilité statique simple qui fait le tour en utilisant un cadre ext.
findColumnDataIndex: function(columns, dataIndex) { var column = null; Ext.Array.each(columns, function(c) { if (c.dataIndex === dataIndex) { column = c; return false; } }, this); return column; }
var RowEditor = new Ext.grid.plugin.RowEditing({...}); RowEditor.editor.form.findField('Task');
La manière la plus standard d'obtenir une colonne par dataIndex
serait:
var column = grid.columnManager.getHeaderByDataIndex('Tasks')
Notez que cela renvoie une colonne (contrairement au nom de la fonction). C'est parce qu'un en-tête de grille dans ExtJS est en réalité un en-tête et un contenu de colonne.
Ext.grid.column.Column docs :
Cette classe spécifie la définition d'une colonne dans Ext.grid.Grid. Il englobe à la fois la configuration de l'en-tête de la grille et l'affichage des données dans la grille elle-même.
Voir aussi: getHeaderByDataIndex docs .