2009-11-25 34 views
11

Tengo un panel de cuadrícula que necesito mostrar/ocultar columnas en un panel de cuadrícula según el valor de una casilla de verificación. Si la casilla de verificación está marcada, necesito mostrar la columna en la cuadrícula y, si no está marcada, necesito ocultar la columna en la cuadrícula.cómo mostrar/ocultar columna en un panel de cuadrícula extjs 3

Aquí está mi código

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 }, 
    ]); 

cuando actualice la página no soy capaz de alternar las columnas en función del valor de la casilla de verificación. Pero cuando inicio sesión y cierro sesión, puedo ver los cambios en el panel de la cuadrícula. ¿Alguien puede ayudarme a actualizar los valores de columna en el panel de la cuadrícula?

+0

18k vistas en dos minutos ..... – starbeamrainbowlabs

+1

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

+0

Posible duplicado de [ExtJs4 - ¿Cuál es el equivalente a la cuadrícula ColumnModel?] (Https://stackoverflow.com/questions/6042138/extjs4-what-is-the-equivalent-to-the-grid-columnmodel) – durtto

Respuesta

24

si echar un vistazo a la API de ExtJS, particularmente la ColumModel hay un método setHidden, sería ocultar/mostrar una columna en una GridPanel.

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

también debe enlazar el evento onchange de la casilla de verificación para que pueda mostrar u ocultar la columna

+0

Checkbox is en otra página a la que se establece una bandera y que depende del valor de la columna de la bandera en el panel de la cuadrícula es visible u oculta. Está funcionando perfecto ahora. Gracias por la respuesta. – xrx215

+0

Esto está en desuso en 4.0+ –

3

Puede mostrar columnas/ocultar utilizando el menú de cabecera de la columna - se puede elegir qué columna que desea tener mostrado. De todos modos, si desea mostrar/ocultar una columna, probar este

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

Gracias. Está funcionando ahora :) – xrx215

12

En Ext JS 4.1, para ocultar una columna, se utiliza:

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

Parece que getColumnModel() con su setHidden () método ya no forma parte de la cuadrícula: http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.Panel

+0

debería setVisible (falso); – Marshal

+0

Gracias Marshal :) – Tom

+3

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

1

En ExtJS 4 obtenga acceso a su panel de cuadrícula, y luego acceda al atributo columns que es una matriz de objetos Column.

Desde allí puede usar los métodos del iterador de matriz (http://www.diveintojavascript.com/core-javascript-reference/the-array-object) para realizar una acción.

En el siguiente ejemplo, oculto y muestro algunas de las columnas en función de sus nombres de encabezado, pero obviamente puede realizar una acción basada en cualquier atributo de columna.

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

El único problema aquí es que: di que hay seis columnas y quieres mostrar cinco inicialmente y luego mostrar la sexta solo si la casilla está marcada. y en mi caso con el código anterior, muestra que las seis columnas [col.hidden = true] funcionan en ese caso. Y así terminé configurando el oculto como verdadero para todas las columnas inicialmente. Y ejecutando este código en beforerender. Eso funciona –

0

Las respuestas anteriores, creo que son bastante buenas. Pero déjame darte un consejo.

1) En ExtJS 4.x se recomienda utilizar Ext.ComponentQuery `s métodos en lugar de Ext.getCmp()

2) Para ocultar/mostrar columnas de la cuadrícula que utilice el código siguiente

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

o para mostrar

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

Debe resolver ocultar/mostrar cualquier columna en una cuadrícula.

Aquí cuadrícula es su cuadrícula, tal vez id o xtype etc.

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

¿Podría agregar alguna explicación a su respuesta? –

Cuestiones relacionadas