Hello everybody,
I'm working on a snippet which must cover the lack of a column selector
or column chooser in the AdvancedDatagrid component.
I noticed that the maximum number of menuItems is 16 and the menuItems
exceeding 16 will not be shown. Has anyone encountered this issue? And
how have you solved it?

Feel free to use the custom datagrid I'm working on :
package it.custom.controls
{
     import flash.events.ContextMenuEvent;
     import flash.events.Event;
     import flash.ui.ContextMenu;
     import flash.ui.ContextMenuItem;

     import mx.collections.ArrayCollection;
     import mx.controls.AdvancedDataGrid;
     import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;

     public class CustomDataGrid extends AdvancedDataGrid
     {

         public function CustomDataGrid()
         {
             super();
             this.contextMenu = generateContextMenu();
         }

         override public function set dataProvider(value:Object):void{
             super.dataProvider = value;
             this.contextMenu = generateContextMenu();
         }

         private function generateContextMenu():ContextMenu{
             var newContext:ContextMenu = new ContextMenu();
             newContext.hideBuiltInItems();
             var items:ArrayCollection = new ArrayCollection();
             for each (var col:AdvancedDataGridColumn in columns){
                 var menuIText:String = col.headerText;
                 var menuI:ContextMenuItem = new
ContextMenuItem(col.headerText);
                 if(col.visible) menuIText = "* " + menuIText;
                 menuI.caption = menuIText;
                
menuI.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
handleMenuItemSelect);
                 items.addItem(menuI);
             }
             newContext.customItems = items.toArray();
             return newContext;
         }

         private function handleMenuItemSelect(e:Event):void {
             var t:ContextMenuItem = e.target as ContextMenuItem;

             var menuIText:String = t.caption;
             var items:Array = this.contextMenu.customItems;
                 var colIdx:int = items.indexOf(t);
                 var columns:Array = this.columns;
                 var column:AdvancedDataGridColumn = columns[colIdx];
             if(menuIText.substr(0,2) == ("* ")){
                 t.caption = t.caption.substr(2);
                 column.visible = false;
             }
             else{
                 t.caption = "* " + t.caption;
                 column.visible = true;
             }
         }
     }
}


Reply via email to