Hi all,

Am making a function of show/hide column of dataGrid using Context 
Menu. 

Contextmenu comes when user clicks right button of mouse on header.

I have made a mxml component and added in headerRender of the 
dataGrid Column. But when I click on my hide column button of 
context menu it doesnt hide my clickd coloum. 

Here in case of Filter in my files, If I enable sorting of the same 
column, it overrides my filter functionality. can anyone let me know 
the solution of it?

In testCombo.mxml, currently I have populated Combo box using 
hardcoded array. I want to populate this array dynamically so that I 
can use the same file for multiple filters. Kindly do let me know 
how can I populate combo box dynamically?


I am atteching my code pls have a look n help me.

Thanks in Advance,
Sanjay sharma



File # 1 :::: contMenuOnGrid.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"; 
        layout="absolute" initialize="doInit()"   
        xmlns:local="*" xmlns:gridCode="*" >
<mx:Script>
        <![CDATA[
                import mx.controls.Alert;
                import mx.collections.*;
                
                
                public var filterVar:String;
                
                [Bindable]
       public var authorsDataProvider : ArrayCollection = new 
ArrayCollection( [
            { Selection: "", Country: "USA", Gold: 35, 
Status:"Active", URL:"http://www.google.com"; },
            { Selection: "", Country: "China", Gold: 32, 
Status:"Deactive",URL:"http://www.yahoo.com"},
            { Selection: "", Country: "Russia", Gold: 
27,Status:"Deactive", URL:"http://www.hotmail.com"; },
            { Selection: "", Country: "India", Gold: 12, 
Status:"Active",URL:"http://www.gmail.com"},
            {Selection: "", Country: "Russia", Gold: 27, 
Status:"Deleted",URL:"http://www.hotmail.com"; },
            {Selection: "", Country: "Russia", Gold: 27, 
Status:"Deleted",URL:"http://www.hotmail.com"; },
            { Selection: "", Country: "China", Gold: 32, 
Status:"Deactive",URL:"http://www.yahoo.com"},
            { Selection: "", Country: "Russia", Gold: 
27,Status:"Deactive", URL:"http://www.hotmail.com"; },
            { Selection: "", Country: "India", Gold: 12, 
Status:"Active",URL:"http://www.gmail.com"},
            {Selection: "", Country: "Russia", Gold: 27, 
Status:"Deleted",URL:"http://www.hotmail.com"; },
            {Selection: "", Country: "Russia", Gold: 27, 
Status:"Deleted",URL:"http://www.hotmail.com"; },
            { Selection: "", Country: "China", Gold: 32, 
Status:"Deactive",URL:"http://www.yahoo.com"},
            { Selection: "", Country: "Russia", Gold: 
27,Status:"Deactive", URL:"http://www.hotmail.com"; },
            { Selection: "", Country: "India", Gold: 12, 
Status:"Active",URL:"http://www.gmail.com"},
            {Selection: "", Country: "Russia", Gold: 27, 
Status:"Deleted",URL:"http://www.hotmail.com"; },
            {Selection: "", Country: "Russia", Gold: 27, 
Status:"Deleted",URL:"http://www.hotmail.com"; } ]);
                
                
                
                public function doInit():void{
                        /*var gridSnippet:gridCode = null;
                        gridSnippet = new gridCode();
                        gridSnippet.addEventListener( 
gridCode.HIDE_COLUMN, hideCol );
                        addChild(gridSnippet);
                        gridSnippet.visible = false;*/
                }
                
                public function filterFnc(item:Object):Boolean {
                return item.Gold == 27 ;
          }
                public function filterFnc1(item:Object):Boolean {
                                //Alert.show("item: "+item.toString
());
                                //Alert.show("item.Gold.toString()")
                return item.Status == "Deactive" ;
          }
        public function hideCol( event:Event ):void
                {
                        Alert.show("hideCol")
                }
                
        ]]>
</mx:Script>
<mx:Panel title="Header Filter" width="100%" height="100%">
      <gridCode:gridCode  dataProvider="{authorsDataProvider}" />
</mx:Panel>
</mx:Application>


File # 2 :::: gridCode.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml"; 
         >
        
        <mx:Script>
                <![CDATA[
                        import mx.core.UIComponent;
                        import mx.controls.Alert;
                        import mx.events.DataGridEvent;
                        
                public var curColumn:String;    
                
                public function showColumn( event:Event ):void
                {
                        Alert.show("showColumn");
                        Selection.visible = true;
                        Country.visible = true;
                        Status.visible = true;
                        Gold.visible = true;
                }
                private function headerPressed
(evt:DataGridEvent):void{
                        
                        curColumn = evt.dataField;              
        
                }
                private function gridSelected(event:Event):void{
                        Alert.show
("event.selectedItem"+event.target.selectedItem);
                }
                private function btPressed(col:String):void{
                        Alert.show("col "+col);
                        this[col].visible = false;
                }
                private function pPressed():void{
                        
                        this[curColumn].visible = true;
                }
                ]]>
        </mx:Script>
        <mx:columns>
          <mx:Array>
            <mx:DataGridColumn id="Selection" 
headerRenderer="contMenu" headerText="Selected" 
itemRenderer="MyContactEditable" resizable="false"  
dataField="Selection" width="80" />
            <mx:DataGridColumn id="Country" 
headerRenderer="contMenu"  width="300" headerText="Country" 
dataField="Country"   />
            <mx:DataGridColumn id="Status" width="300"  
headerText="Status" dataField="Status"  headerRenderer="testCombo" 
sortable="false"/>
            <mx:DataGridColumn id="Gold" width="300" 
headerText="Gold" dataField="Gold" />
         </mx:Array>
       </mx:columns>
</mx:DataGrid>


File # 3 :::: contMenu.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:TextArea xmlns:mx="http://www.adobe.com/2006/mxml"; 
enabled="false"  height="100%"  width="100%" 
          preinitialize="doCreationComplete( event )" alpha="100" 
backgroundAlpha="0" borderThickness="0">
        <mx:Metadata>
                [Event( name="hideColumn", 
type="flash.events.Event" )]            
        </mx:Metadata>  
        <mx:Script>
                <![CDATA[
                        import mx.core.UIComponent;
                        import mx.controls.Alert;
                        import 
mx.controls.dataGridClasses.DataGridListData;
                        import 
mx.controls.dataGridClasses.DataGridColumn;
           
                        import mx.managers.PopUpManager;
                        
                        public static const HIDE_COLUMN:String 
= "hideColumn";
                        public static const SHOW_ALL:String 
= "showAll";
                        
                        private var menu:ContextMenu = null;
                        public var curColumn:String;
                        
            private function showWindow():void {
                var showHideWindow:shPanel = shPanel
(PopUpManager.createPopUp( this, shPanel , true));
            }  
                         
                        public function doCreationComplete
(event:Event):void{
                                
                                var item:ContextMenuItem = null;
                                var items:Array = new Array();  
                        
                                
                                menu = new ContextMenu();
                                
                                item = new ContextMenuItem( "Hide 
Column" );
                                item.addEventListener( 
ContextMenuEvent.MENU_ITEM_SELECT, hideColumn );
                                items.push( item );
                                
                                menu.customItems = items;
                                
                                item = new ContextMenuItem( "Show 
All Columns" );
                                item.addEventListener( 
ContextMenuEvent.MENU_ITEM_SELECT, showColumn );
                                items.push( item );
                                menu.customItems = items;
                                menu.hideBuiltInItems();
                                
                                contextMenu = menu;
                        }
                public function hideColumn( event:Event ):void
                {       
                        //myListData.
                        //showWindow()
                        var myListData:DataGridListData = 
DataGridListData(listData);
                         var myCol:DataGridColumn = DataGridColumn
(myCol);
                        //myCol.visible = false;
                        //myCol.width = 300
                        Alert.show("second:: "+ 
myListData.dataField);
                }
                
                public function showColumn( event:Event ):void
                {
                        //showColumn()
                        //Selection.visible = true;
                        //Country.visible = true;
                        //Status.visible = true;
                        //Gold.visible = true;
                }
                ]]>
        </mx:Script>
</mx:TextArea>



File # 4 :::: shPanel.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"; 
    title="Show/Hide Column" x="350" y="86"  
    showCloseButton="true"  close="closePOP()" height="200" 
width="314" verticalAlign="middle" horizontalAlign="center">


    <mx:Script>
        <![CDATA[       
            import mx.managers.PopUpManager;
            import mx.controls.Text;
            import mx.controls.Alert;
           
            // A reference to the TextInput control in which to put 
the result.
            public var loginName:Text;
           
            // Event handler for the OK button.
            private function returnName(evt:Event):void {
                
               // loginName.text="Name entered: " + userName.text; 
                PopUpManager.removePopUp(this);
            }
            private function closePOP():void{
                PopUpManager.removePopUp(this);
            }
            private function cntCheck():void{
                //Alert.show(this.toString());
            
        //parentDocument.parentDocument.parentDocument.parentDocument
.parentDocument.showColumn()
            }
        ]]>
    </mx:Script>


<mx:Form id="addUserForm" width="266" height="150" 
        paddingTop="0" paddingBottom="0"
        paddingLeft="0" paddingRight="0">
        <mx:HBox width="260" horizontalGap="0">
                         <mx:FormItem label="selection:" 
width="111"/>
                         <mx:Spacer width="10" />
            <mx:CheckBox id="select_ch"/>
        </mx:HBox>
        <mx:HBox width="260" horizontalGap="0">
                         <mx:FormItem label="Coutntry:"  
width="111"/>
                         <mx:Spacer width="10" />
            <mx:CheckBox id="cnt_ch"  click="cntCheck()" />
        </mx:HBox>
        
    <mx:HBox width="260" horizontalAlign="center">
        <mx:Button id="mySubmitButton" label="Submit"/>
        <mx:Button label="Cancel" click="closePOP()"/>
    </mx:HBox>
</mx:Form>
</mx:TitleWindow>

File # 5 :::: testCombo.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"; 
preinitialize="init()">  
<mx:Script>
                <![CDATA[
                        import mx.controls.listClasses.ListData;
                        import mx.controls.Alert;
                        import 
mx.controls.dataGridClasses.DataGridColumn
            import flash.events.Event;
                        import mx.events.DataGridEvent;

                        
                        public var Listener:Object = new Object();
                        public  var myListData:DataGridColumn = 
DataGridColumn(myListData);
                        
                        [Bindable]  
                        public var statusArray:Array = ["All",
                        "Active",
                        "Deactive",
                        "Deleted"];
                        
                        public function init():void{
                                //Alert.show(myListData.toString());
                                addEventListener("initialize", 
handleDataChanged);
                        }
                        public function initi():void{
                                cboAuthorsStatusFilter.selectedItem 
= parentDocument.filterVar
                                headLabel.text = 
parentDocument.filterVar
                        }
                        public function handleDataChanged
(event:Event):void { 
                                //var ttext:String ="row index: " + 
String(myListData.rowIndex) +                     " column index: " 
+ String(myListData.columnIndex);
                                //Alert.show
("ttext:: "+event.eventPhase);
                        
                } 
            public function changeCombo(evt:Event):void{
                
                parentDocument.filterVar = 
cboAuthorsStatusFilter.selectedItem.toString();
                if(cboAuthorsStatusFilter.selectedItem == "All"){
                
        parentDocument.authorsDataProvider.filterFunction = 
null;                           
                }else{
                
        parentDocument.authorsDataProvider.filterFunction = 
filterFnc;
                }
                        parentDocument.authorsDataProvider.refresh();
                                
            }
            public function filterFnc(item:Object):Boolean {
                return item.Status == 
cboAuthorsStatusFilter.selectedItem ;
                 }
                    ]]>
        </mx:Script>  
    <mx:ComboBox width="100%" id="cboAuthorsStatusFilter"
    dataProvider="{statusArray}"   change="changeCombo(event)" 
creationComplete="initi()" /> 
        <mx:Label id="headLabel"  />     
        
</mx:HBox>


File # 6 :::: myContactEditable.mxml


<?xml version="1.0"?>
<!-- MyContactEditable.mxml -->
<mx:CheckBox change="boxClicked()" preinitialize="init()" 
xmlns:mx="http://www.adobe.com/2006/mxml";>

   <mx:Script>
        <![CDATA[
        import mx.controls.Alert;
        import mx.events.DataGridEvent;
            // Define a property for returning the new value to the 
cell.
            public var newContact:String=new String();
          // public var girdColIndex:DataGridEvent;
            public function init():void{
                this.x = 20;
            
                
            }
            public function boxClicked():void{
                Alert.show("x: "+this)
            }
        ]]>
    </mx:Script>
   
</mx:CheckBox>




Reply via email to