2009-11-25 16 views
11

Ho un pannello della griglia ho bisogno di mostrare/nascondere le colonne in un pannello della griglia a seconda del valore di una casella di controllo. Se la casella è selezionata ho bisogno di visualizzare la colonna nella griglia e se è deselezionata ho bisogno di nascondere la colonna nella griglia.come mostrare/nascondere la colonna in un pannello di griglia extjs 3

Ecco il mio codice

var chkEnableDisplayResponsibilityForAction = '<%=Session["chkEnableDisplayResponsibilityForAction"]%>'; 

var flags = Boolean.parse(chkEnableDisplayResponsibilityForAction); 
var flags1 = !Boolean.parse(chkEnableDisplayResponsibilityForAction) 

var colModel = new Ext.grid.ColumnModel([ 
{ header: "PricePlanID", width: 100, sortable: true, dataIndex: 'PricePlanID', hidden: flags, hideable: flags1 }, 
    ]); 

quando ho aggiorna la pagina io non sono in grado di attivare o disattivare le colonne a seconda del valore della casella di controllo. Ma quando effettuo il login e logout sono in grado di vedere le modifiche nel pannello della griglia. Qualcuno può aiutarmi ad aggiornare i valori delle colonne nel pannello della griglia?

+0

18k viste in due minuti ..... – starbeamrainbowlabs

+1

ExtJs 4: http://stackoverflow.com/questions/6042138/extjs4-what-is-the-equivalent-to-the-grid-columnmodel – Justin

+0

Possibile duplicato di [ExtJs4 - Qual è l'equivalente della griglia ColumnModel?] (Https://stackoverflow.com/questions/6042138/extjs4-che- è-il-equivalente-del-grid-columnmodel) – durtto

risposta

24

se si dà un'occhiata all'API ExtJS, in particolare il ColumModel esiste un metodo setHidden, si nasconde/mostra una colonna in un GridPanel.

myGrid.getColumnModel().setHidden(0, true); 

si dovrebbe anche associare l'evento onchange tua casella di controllo di modo da poter mostrare o nascondere la colonna

+0

La casella di controllo è in un'altra pagina in cui è impostato un flag e in base al valore della colonna flag nel pannello della griglia è visibile o nascosto. Funziona perfettamente ora. Grazie per la risposta. – xrx215

+0

Questo è obsoleto in 4.0+ –

3

È possibile mostrare/nascondere le colonne utilizzando menu dell'intestazione della colonna - è possibile scegliere quale colonna si desidera avere mostrato. In ogni caso, se si desidera visualizzare/nascondere una colonna, provate questo

myGrid.getColumnModel().setHidden(0, true); 
+0

Grazie. Funziona ora :) – xrx215

12

In Ext JS 4.1, per nascondere una colonna, si utilizza:

grid.columns[0].setVisible(false); 

Sembra getColumnModel() con il suo setHidden () il metodo non fa più parte della griglia: http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.Panel

+0

dovrebbe setVisible (false); – Marshal

+0

Grazie Maresciallo :) – Tom

+3

stenografia: grid.columns [0] .hide() http://docs.sencha.com/ext-js/4-1/source/AbstractElement.html#Ext-dom-AbstractElement-method -hide – v1r00z

1

In ExtJS 4 accedere al pannello della griglia e quindi accedere all'attributo colonne che è una matrice di oggetti Colonna.

Da lì è possibile utilizzare i metodi di iterazione dell'array (http://www.diveintojavascript.com/core-javascript-reference/the-array-object) per eseguire un'azione.

Nell'esempio seguente nascondo e mostro alcune delle colonne in base ai loro nomi di intestazione, ma è ovviamente possibile eseguire azioni basate su qualsiasi attributo di colonna.

var grid = Ext.getCmp('my_grid_panel'); 

grid.columns.forEach(function(col) { 
    if((col.text == "Foo") || (col.text == "Bar")) { 
     col.setVisible(true); 
    } else if(col.text == "Baz") { 
     col.setVisible(false); 
    } 
}); 
+0

L'unico problema qui è che - Dire che ci sono sei colonne e si vuole mostrare cinque inizialmente e poi mostrare il sesto solo se la casella è selezionata. e nel mio caso con il codice sopra, mostra tutte e sei le colonne [col.hidden = true] funziona in quel caso. E così ho finito per impostare il nascosto come vero per tutte le colonne inizialmente. E facendo funzionare questo codice in beforerender. Funziona –

0

Le risposte sopra riportate sono piuttosto buone. Ma lascia che ti dia un consiglio.

1) In ExtJS 4.x si consiglia di utilizzare Ext.ComponentQuery `s metodi, invece di Ext.getCmp()

2) Per nascondere/mostrare le colonne della griglia si possibile utilizzare seguente codice

Ext.ComponentQuery.query('grid gridcolumn[dataIndex^="service"]')[0].hide() 

o visualizzare

Ext.ComponentQuery.query('grid gridcolumn[dataIndex^="service"]')[0].show() 

Dovrebbe risolvere nascondere/mostrare qualsiasi colonna in una griglia.

Qui la griglia è la tua rete, forse id o xtipo ecc.

0
setVisibleColumn  : function(name, flag) { 
    name = Ext.Array.from(name); 
    var column; 

    for (var i = 0; i < name.length; i++) { 
     column = this.getColumn(name[i]); 
     if (column) { 
      flag ? column.show() : column.hide(); 
     } 
    } 

} 
+0

Potresti aggiungere qualche spiegazione alla tua risposta? –

Problemi correlati