2012-12-06 18 views
11

Bene in ExtJS 3 ho usato il seguente codice:come trovare indice di colonna utilizzando DataIndex ExtJS 4

grid.getColumnModel().findColumnIndex("Tasks")

ho provato trovare sulla documentazione API, ma senza fortuna ... così come è ir possibile che io possa trovare l'indice di colonna della griglia dal dataIndex della colonna o il nome dell'intestazione di quella colonna.

risposta

8

Immagino che dovresti trovare l'indice iterando attraverso l'array grid.columns e confrontando la proprietà dataIndex di ogni colonna.

Esempio:

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')); 
+0

grande, che ha funzionato come un fascino ... grazie .. :) –

+4

Invece di 'grid.columns' usa' grid.columnManager.columns'. In questo modo se le colonne vengono riordinate, la tua funzione restituisce l'indice corretto. – Mehran

0
var gridColumns = grid.headerCt.getGridColumns(); 
for (var i = 0; i < gridColumns.length; i++) { 
    if (gridColumns[i].dataIndex == 'yourdataIndex') { 
    alert(i); 
    } 
} 
28

È possibile utilizzare la query componente:

var fname = grid.down('[dataIndex=firstname]'); 

C'è voluto un po 'per lavorare che fuori - ci ha colpiti particolarmente sembrano essere un esempio nella documentazione. ;-)

+0

Preferisco questa risposta che utilizza un selettore sopra la risposta accettata che coinvolge potenzialmente iterando ogni colonna nella griglia. – tommyO

0

Component Query può essere un po 'lento e non garantisce un solo risultato. È un po 'più veloce per iterare semplicemente sulla matrice di colonne che appartengono alla griglia.

Ecco una semplice funzione statica utile che utilizza il framework 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; 
 
}

uso questo codice per ottenere le colonne dal vostro pannelli grigliati esempio

var columns = grid.headerCt.items.items,

0
var RowEditor = new Ext.grid.plugin.RowEditing({...}); 
    RowEditor.editor.form.findField('Task'); 
+0

Spiega la tua risposta in modo che sia utile per i futuri utenti. – Prudhvi

2
function getColumnIndex(grid, dataIndex) { 
    gridDataIndices = Ext.Array.pluck(grid.columns, 'dataIndex'); 

return Ext.Array.indexOf(gridDataIndices, desireDataIndex); 
} 

answered in sencha forums

1

Il modo più standard per ottenere una colonna dataIndex sarebbe:

var column = grid.columnManager.getHeaderByDataIndex('Tasks') 

Si noti che questo fa tornare una colonna (in contrasto con il nome della funzione). Questo perché un'intestazione di griglia in ExtJS è in realtà sia un'intestazione sia un contenuto di colonna.

Ext.grid.column.Column docs:

Questa classe specifica la definizione di una colonna all'interno di una Ext.grid.Grid. Comprende sia la configurazione dell'intestazione della griglia come che la visualizzazione dei dati all'interno della griglia stessa.

Vedere anche: getHeaderByDataIndex docs.

Problemi correlati