2012-11-15 4 views
5

Bitte helfen Sie! Ich benutze ExtJs 4.1 Grid Panel.Extjs Grid panel - Ändern Sie enableColumnHide Eigenschaft nach dem Rendern

Ich bin auf der Suche nach einer Möglichkeit, die Raster enableColumnHide -Eigenschaft nach dem Rendern zu ändern. Ich benutze das gleiche Raster in einigen Bildschirmen mit kleinen Änderungen, hauptsächlich einige der Spalten ausgeblendet.

In einem dieser Bildschirme bin ich nur mit Spalten, die nicht versteckt werden sollte, also möchte ich die Option aus dem Spaltenkopfmenü vollständig entfernen, aber wiederherstellen, wenn ich zu einem der anderen Bildschirme komme.

Irgendwelche Ideen?

Antwort

1

Es scheint, dass es keinen offensichtlichen Weg gibt, es zu tun, aber ich habe einen Hack - Change enableColumnHide auf dem headerCt gefunden und Header-Menü jedes Mal zerstören, wenn Sie diesen Wert ändern. Beispielcode:

var checkbox = new Ext.form.field.Checkbox({ 
    renderTo: 'checkbox', 
    boxLabel: 'enableColumnHide', 
    checked: true, 
    handler: function(sender, checked) { 
     var h = grid.headerCt; 
     h.enableColumnHide = checked; 
     if (h.menu) { 
      h.menu.destroy(); 
      h.menu = null; 
     } 
    } 
}); 

Es ist auch posiible durch auf Säulen mit ausblendbar:

var checkbox = new Ext.form.field.Checkbox({ 
    renderTo: 'checkbox', 
    boxLabel: 'enableColumnHide', 
    checked: true, 
    handler: function(sender, checked) { 
     Ext.each(grid.columns, function(c){ 
      c.hideable = checked; 
     }); 
    } 
}); 

Probe Arbeiten mit enableColumnHide: http://jsfiddle.net/M3Aqq/5/

Probe Arbeiten mit hideable: http://jsfiddle.net/M3Aqq/9/

+0

interessant ... Würde diese Arbeit auch für die versteckbar Eigenschaft auf den Säulen? – danfromisrael

+0

Mit verbergbar gibt es keine Notwendigkeit, Menü zu zerstören. Ich habe meine Antwort aktualisiert. – Krzysztof

+0

Das ist awesomem, 10x Lolo! Gibt es einen Weg dazu, dass Spalten, die nicht versteckt werden können, nicht in der Checkliste "Spalten" angezeigt werden? Ich möchte, dass der Benutzer nur die Spalten sieht, die er tatsächlich in dieser Liste verbergen kann –

2

i auch eine hatte ähnliches Problem vorher. Sie können hier für meine Abhilfe überprüfen:

Extjs Grid panel - Hide a column with hideable=false

im Grunde habe ich auf die „beforeshow“ Ereignis des Rasters Header-Menü registriert und verstecken sich ausblendbar Spalte Checkbox Element im Menü nach dem „ausblendbar“ Propery auf jeder Spalte.

können Sie das gleiche mit „enableColumnHide“ tun (verstecken Sie einfach die „Spalten“ Untermenü, das sich nur ein Menüpunkt ist)