[flexcoders] Re: Filters with DataGrid - Excel
Hi, I have started this functionality and even I got success but upto an extent and now I am stucked. I have rendered the header and placed a comboBox using testCombo.mxml. Here I have a few queries like: 1. How can I get rendered header's column Index so that I can the unique value of that purticular column n populate that combo box? 2. Currently, when I change the combo item, it filters my arrayCollection and show the data accordingly but it doesnt keep selected the selected Item. Suggest something to rectify. 3. How Can I Hide/Show a Column of a dataGrid? or How Can I Add/Delete a Column of a DataGrid? 4. How Can I get/set the column Index or Label on which Sorting is implemented? 5. How can I get/set width of each column of a dataGrid? I have some questions also in my mind... but that'll for next time .. ;) I have also pasted the code below. Please help me to resolve these issues.. Thanks in advance... Sanjay Sharma Code:: MainGrid.mxml ::: ?xml version=1.0 encoding=utf-8? mx:Application xmlns:mx=http://www.adobe.com/2006/mxml; layout=absolute initialize=doInit() mx:Script ![CDATA[ import mx.controls.Alert; import mx.collections.*; [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{ } 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 ; } ]] /mx:Script mx:Panel title=Header Filter width=100% height=100% mx:DataGrid allowMultipleSelection=true id=grid dataProvider={authorsDataProvider} width=100% height=100% sortableColumns=false mx:columns mx:Array mx:DataGridColumn itemRenderer=MyContactEditable resizable=false dataField=Selection width=80 / mx:DataGridColumn width=300 headerText=Country dataField=Country / mx:DataGridColumn width=300 headerText=Status dataField=Status headerRenderer=testCombo/ mx:DataGridColumn width=300 headerText=Gold dataField=Gold / /mx:Array /mx:columns /mx:DataGrid /mx:Panel /mx:Application :: 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.DataGridListData; import flash.events.Event; import mx.events.DataGridEvent; public var Listener:Object = new Object(); public var myListData:DataGridListData = DataGridListData(myListData); [Bindable] public var statusArray:Array = [All, Active,
[flexcoders] Re: Filters with DataGrid - Excel
Regarding #2, this should help: http://www.returnundefined.com/2006/11/creating-truly-reusable-renderers-with-classfactory/ Most of your other questions should be pretty simple to find in the documentation for DataGrid and DataGridColumn. HTH, Ben --- In flexcoders@yahoogroups.com, sanjaypmg [EMAIL PROTECTED] wrote: Hi, I have started this functionality and even I got success but upto an extent and now I am stucked. I have rendered the header and placed a comboBox using testCombo.mxml. Here I have a few queries like: 1. How can I get rendered header's column Index so that I can the unique value of that purticular column n populate that combo box? 2. Currently, when I change the combo item, it filters my arrayCollection and show the data accordingly but it doesnt keep selected the selected Item. Suggest something to rectify. 3. How Can I Hide/Show a Column of a dataGrid? or How Can I Add/Delete a Column of a DataGrid? 4. How Can I get/set the column Index or Label on which Sorting is implemented? 5. How can I get/set width of each column of a dataGrid? I have some questions also in my mind... but that'll for next time .. ;) I have also pasted the code below. Please help me to resolve these issues.. Thanks in advance... Sanjay Sharma Code:: MainGrid.mxml ::: ?xml version=1.0 encoding=utf-8? mx:Application xmlns:mx=http://www.adobe.com/2006/mxml; layout=absolute initialize=doInit() mx:Script ![CDATA[ import mx.controls.Alert; import mx.collections.*; [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{ } 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 ; } ]] /mx:Script mx:Panel title=Header Filter width=100% height=100% mx:DataGrid allowMultipleSelection=true id=grid dataProvider={authorsDataProvider} width=100% height=100% sortableColumns=false mx:columns mx:Array mx:DataGridColumn itemRenderer=MyContactEditable resizable=false dataField=Selection width=80 / mx:DataGridColumn width=300 headerText=Country dataField=Country / mx:DataGridColumn width=300 headerText=Status dataField=Status headerRenderer=testCombo/ mx:DataGridColumn width=300 headerText=Gold dataField=Gold / /mx:Array /mx:columns /mx:DataGrid /mx:Panel /mx:Application :: 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.DataGridListData; import flash.events.Event;
[flexcoders] Re: Filters with DataGrid - Excel
Hi, I have tried to get column index in my testCombo.mxml by importing mx.controls.dataGridClasses.DataGridListData But I am not able to get column index or column name. Could anyone please help me? so that i can complete the task and populate code for all. Thanks, Sanjay sharma --- In flexcoders@yahoogroups.com, phipzkillah [EMAIL PROTECTED] wrote: Sanjay, Did you have any luck converting the DG Header Filter cell renderer to Flex 2.0? These are the cons that were posted with the code snippet: CONS 1) you must maintain the same dataProvider. 2) sorting is no good. you might want to re-sort after a filter is done (but providing events and what not are still something I need to provide, probable a modelChanged event utilizing the eventName 'filter' There is still a lot to do for this renderer to make it more usable, but I figure I've gotten everyone to a dropping off point it shouldn't be too hard. As I progress with this I'll post more to this thread # I'm not sure exactly what you are trying to do. Do you just simply want a combo-box that you select a field in the list and have it sort the datagrid? If so I believe you need to use an ArrayList collection for your dataprovider. The link that I gave you earlier seems like it would be the best for filtering a datagrid as you would be able to filter on each field/column by clicking on the header and selecting an item - which is exactly what Excel does. If you were able to convert that datagrid header filter cell renderer to Flex 2.0 can you please post the source up here? -Phil --- In flexcoders@yahoogroups.com, sanjaypmg sanjaypmg@ wrote: Hi, I have tried it but facing a problem when I try to access DataCollection from another MXML testCombo.mxml. Please Suggest::: See the following Code: filterTest.mxml ?xml version=1.0 ? mx:Application xmlns:mx=http://www.adobe.com/2006/mxml; xmlns=../* mx:Script ![CDATA[ import mx.collections.ArrayCollection; import mx.core.ClassFactory; public var object2:Object = new Object(); public var object:Object = new Object(); [Bindable] [Bindable] public var authorsDataProvider : ArrayCollection = new ArrayCollection( [ { Country: USA, Gold: 35, Status:Active, URL:http://www.google.com; }, { Country: China, Gold: 32, Status:Deactive,URL:http://www.yahoo.com}, { Country: Russia, Gold: 27,Status:Deactive, URL:http://www.hotmail.com; }, { Country: India, Gold: 12, Status:Active,URL:http://www.gmail.com}, {Country: Russia, Gold: 27, Status:Deleted,URL:http://www.hotmail.com; }, {Country: Russia, Gold: 27, Status:Deleted,URL:http://www.hotmail.com; } ]); ]] /mx:Script mx:Panel title=Header Filter width=100% height=100% mx:DataGrid id=grid dataProvider={authorsDataProvider} width=100% height=100% sortableColumns=false mx:columns mx:Array mx:DataGridColumn width=300 headerText=Country dataField=Country / mx:DataGridColumn width=300 headerText=Value dataField=Gold/ mx:DataGridColumn width=300 headerText=Status dataField=Status headerRenderer=testCombo/ mx:DataGridColumn width=300 headerText=URL dataField=URL/ /mx:Array /mx:columns /mx:DataGrid /mx:Panel /mx:Application testCombo.mxml: ?xml version=1.0 encoding=utf-8? mx:HBox xmlns:mx=http://www.adobe.com/2006/mxml; mx:Label text=Sale Price!/ mx:ComboBox id=cboAuthorsStatusFilter dataProvider={authorsStatusArray} change=filterAuthorsGrid(); !-- dataProvider={_parent._parent.gridData}-- mx:Script ![CDATA[ import mx.controls.Alert; import mx.collections.*; [Bindable] public var authorsArray:Array = [All, Active, Deactive, Deleted]; [Bindable] public var authorsStatusArray : Array = populateAuthorsStatusArray(authorsArray); public function populateAuthorsStatusArray (authorsArray:Array):Array { //Alert.show (authorsArray: +authorsArray.toString()) var statusArrayHashMap : Object = new Object(); var statusArray : Array = new Array; var n:int = authorsArray.length; for (var i:int = 0; i n; i++) { if (statusArrayHashMap
[flexcoders] Re: Filters with DataGrid - Excel
Sanjay To get at the authorsDataProvider - use parentDocument.authorsDataProvider Martin --- In flexcoders@yahoogroups.com, phipzkillah [EMAIL PROTECTED] wrote: Sanjay, Did you have any luck converting the DG Header Filter cell renderer to Flex 2.0? These are the cons that were posted with the code snippet: CONS 1) you must maintain the same dataProvider. 2) sorting is no good. you might want to re-sort after a filter is done (but providing events and what not are still something I need to provide, probable a modelChanged event utilizing the eventName 'filter' There is still a lot to do for this renderer to make it more usable, but I figure I've gotten everyone to a dropping off point it shouldn't be too hard. As I progress with this I'll post more to this thread # I'm not sure exactly what you are trying to do. Do you just simply want a combo-box that you select a field in the list and have it sort the datagrid? If so I believe you need to use an ArrayList collection for your dataprovider. The link that I gave you earlier seems like it would be the best for filtering a datagrid as you would be able to filter on each field/column by clicking on the header and selecting an item - which is exactly what Excel does. If you were able to convert that datagrid header filter cell renderer to Flex 2.0 can you please post the source up here? -Phil --- In flexcoders@yahoogroups.com, sanjaypmg sanjaypmg@ wrote: Hi, I have tried it but facing a problem when I try to access DataCollection from another MXML testCombo.mxml. Please Suggest::: See the following Code: filterTest.mxml ?xml version=1.0 ? mx:Application xmlns:mx=http://www.adobe.com/2006/mxml; xmlns=../* mx:Script ![CDATA[ import mx.collections.ArrayCollection; import mx.core.ClassFactory; public var object2:Object = new Object(); public var object:Object = new Object(); [Bindable] [Bindable] public var authorsDataProvider : ArrayCollection = new ArrayCollection( [ { Country: USA, Gold: 35, Status:Active, URL:http://www.google.com; }, { Country: China, Gold: 32, Status:Deactive,URL:http://www.yahoo.com}, { Country: Russia, Gold: 27,Status:Deactive, URL:http://www.hotmail.com; }, { Country: India, Gold: 12, Status:Active,URL:http://www.gmail.com}, {Country: Russia, Gold: 27, Status:Deleted,URL:http://www.hotmail.com; }, {Country: Russia, Gold: 27, Status:Deleted,URL:http://www.hotmail.com; } ]); ]] /mx:Script mx:Panel title=Header Filter width=100% height=100% mx:DataGrid id=grid dataProvider={authorsDataProvider} width=100% height=100% sortableColumns=false mx:columns mx:Array mx:DataGridColumn width=300 headerText=Country dataField=Country / mx:DataGridColumn width=300 headerText=Value dataField=Gold/ mx:DataGridColumn width=300 headerText=Status dataField=Status headerRenderer=testCombo/ mx:DataGridColumn width=300 headerText=URL dataField=URL/ /mx:Array /mx:columns /mx:DataGrid /mx:Panel /mx:Application testCombo.mxml: ?xml version=1.0 encoding=utf-8? mx:HBox xmlns:mx=http://www.adobe.com/2006/mxml; mx:Label text=Sale Price!/ mx:ComboBox id=cboAuthorsStatusFilter dataProvider={authorsStatusArray} change=filterAuthorsGrid(); !-- dataProvider={_parent._parent.gridData}-- mx:Script ![CDATA[ import mx.controls.Alert; import mx.collections.*; [Bindable] public var authorsArray:Array = [All, Active, Deactive, Deleted]; [Bindable] public var authorsStatusArray : Array = populateAuthorsStatusArray(authorsArray); public function populateAuthorsStatusArray (authorsArray:Array):Array { //Alert.show (authorsArray: +authorsArray.toString()) var statusArrayHashMap : Object = new Object(); var statusArray : Array = new Array; var n:int = authorsArray.length; for (var i:int = 0; i n; i++) { if (statusArrayHashMap [authorsArray] == undefined) { statusArrayHashMap
[flexcoders] Re: Filters with DataGrid - Excel
Hi, I have tried it but facing a problem when I try to access DataCollection from another MXML testCombo.mxml. Please Suggest::: See the following Code: filterTest.mxml ?xml version=1.0 ? mx:Application xmlns:mx=http://www.adobe.com/2006/mxml; xmlns=../* mx:Script ![CDATA[ import mx.collections.ArrayCollection; import mx.core.ClassFactory; public var object2:Object = new Object(); public var object:Object = new Object(); [Bindable] [Bindable] public var authorsDataProvider : ArrayCollection = new ArrayCollection( [ { Country: USA, Gold: 35, Status:Active, URL:http://www.google.com; }, { Country: China, Gold: 32, Status:Deactive,URL:http://www.yahoo.com}, { Country: Russia, Gold: 27,Status:Deactive, URL:http://www.hotmail.com; }, { Country: India, Gold: 12, Status:Active,URL:http://www.gmail.com}, {Country: Russia, Gold: 27, Status:Deleted,URL:http://www.hotmail.com; }, {Country: Russia, Gold: 27, Status:Deleted,URL:http://www.hotmail.com; } ]); ]] /mx:Script mx:Panel title=Header Filter width=100% height=100% mx:DataGrid id=grid dataProvider={authorsDataProvider} width=100% height=100% sortableColumns=false mx:columns mx:Array mx:DataGridColumn width=300 headerText=Country dataField=Country / mx:DataGridColumn width=300 headerText=Value dataField=Gold/ mx:DataGridColumn width=300 headerText=Status dataField=Status headerRenderer=testCombo/ mx:DataGridColumn width=300 headerText=URL dataField=URL/ /mx:Array /mx:columns /mx:DataGrid /mx:Panel /mx:Application testCombo.mxml: ?xml version=1.0 encoding=utf-8? mx:HBox xmlns:mx=http://www.adobe.com/2006/mxml; mx:Label text=Sale Price!/ mx:ComboBox id=cboAuthorsStatusFilter dataProvider={authorsStatusArray} change=filterAuthorsGrid(); !-- dataProvider={_parent._parent.gridData}-- mx:Script ![CDATA[ import mx.controls.Alert; import mx.collections.*; [Bindable] public var authorsArray:Array = [All, Active, Deactive, Deleted]; [Bindable] public var authorsStatusArray : Array = populateAuthorsStatusArray(authorsArray); public function populateAuthorsStatusArray (authorsArray:Array):Array { //Alert.show (authorsArray: +authorsArray.toString()) var statusArrayHashMap : Object = new Object(); var statusArray : Array = new Array; var n:int = authorsArray.length; for (var i:int = 0; i n; i++) { if (statusArrayHashMap [authorsArray] == undefined) { statusArrayHashMap [authorsArray] = new Object(); statusArray.push (authorsArray[i]); } else { statusArray.push (authorsArray [i]); } } return statusArray; } public function filterAuthorsGrid():void { Alert.show(this.toString() + : +authorsDataProvider) //authorsDataProvider.filterFunction=authorsStatusFilter; //authorsDataProvider.refresh(); } public function authorsStatusFilter (item:Object):Boolean { if (cboAuthorsStatusFilter.selectedItem != All) { return item.status == cboAuthorsStatusFilter.selectedItem; } else { return true; } //return true; } ]]
[flexcoders] Re: Filters with DataGrid - Excel
Sanjay, Did you have any luck converting the DG Header Filter cell renderer to Flex 2.0? These are the cons that were posted with the code snippet: CONS 1) you must maintain the same dataProvider. 2) sorting is no good. you might want to re-sort after a filter is done (but providing events and what not are still something I need to provide, probable a modelChanged event utilizing the eventName 'filter' There is still a lot to do for this renderer to make it more usable, but I figure I've gotten everyone to a dropping off point it shouldn't be too hard. As I progress with this I'll post more to this thread # I'm not sure exactly what you are trying to do. Do you just simply want a combo-box that you select a field in the list and have it sort the datagrid? If so I believe you need to use an ArrayList collection for your dataprovider. The link that I gave you earlier seems like it would be the best for filtering a datagrid as you would be able to filter on each field/column by clicking on the header and selecting an item - which is exactly what Excel does. If you were able to convert that datagrid header filter cell renderer to Flex 2.0 can you please post the source up here? -Phil --- In flexcoders@yahoogroups.com, sanjaypmg [EMAIL PROTECTED] wrote: Hi, I have tried it but facing a problem when I try to access DataCollection from another MXML testCombo.mxml. Please Suggest::: See the following Code: filterTest.mxml ?xml version=1.0 ? mx:Application xmlns:mx=http://www.adobe.com/2006/mxml; xmlns=../* mx:Script ![CDATA[ import mx.collections.ArrayCollection; import mx.core.ClassFactory; public var object2:Object = new Object(); public var object:Object = new Object(); [Bindable] [Bindable] public var authorsDataProvider : ArrayCollection = new ArrayCollection( [ { Country: USA, Gold: 35, Status:Active, URL:http://www.google.com; }, { Country: China, Gold: 32, Status:Deactive,URL:http://www.yahoo.com}, { Country: Russia, Gold: 27,Status:Deactive, URL:http://www.hotmail.com; }, { Country: India, Gold: 12, Status:Active,URL:http://www.gmail.com}, {Country: Russia, Gold: 27, Status:Deleted,URL:http://www.hotmail.com; }, {Country: Russia, Gold: 27, Status:Deleted,URL:http://www.hotmail.com; } ]); ]] /mx:Script mx:Panel title=Header Filter width=100% height=100% mx:DataGrid id=grid dataProvider={authorsDataProvider} width=100% height=100% sortableColumns=false mx:columns mx:Array mx:DataGridColumn width=300 headerText=Country dataField=Country / mx:DataGridColumn width=300 headerText=Value dataField=Gold/ mx:DataGridColumn width=300 headerText=Status dataField=Status headerRenderer=testCombo/ mx:DataGridColumn width=300 headerText=URL dataField=URL/ /mx:Array /mx:columns /mx:DataGrid /mx:Panel /mx:Application testCombo.mxml: ?xml version=1.0 encoding=utf-8? mx:HBox xmlns:mx=http://www.adobe.com/2006/mxml; mx:Label text=Sale Price!/ mx:ComboBox id=cboAuthorsStatusFilter dataProvider={authorsStatusArray} change=filterAuthorsGrid(); !-- dataProvider={_parent._parent.gridData}-- mx:Script ![CDATA[ import mx.controls.Alert; import mx.collections.*; [Bindable] public var authorsArray:Array = [All, Active, Deactive, Deleted]; [Bindable] public var authorsStatusArray : Array = populateAuthorsStatusArray(authorsArray); public function populateAuthorsStatusArray (authorsArray:Array):Array { //Alert.show (authorsArray: +authorsArray.toString()) var statusArrayHashMap : Object = new Object(); var statusArray : Array = new Array; var n:int = authorsArray.length; for (var i:int = 0; i n; i++) { if (statusArrayHashMap [authorsArray] == undefined) { statusArrayHashMap [authorsArray] = new Object(); statusArray.push (authorsArray[i]); } else {
[flexcoders] Re: Filters with DataGrid - Excel
Thanks Phil, :) That's what I was looking for...Now I'll try to convert it into Flex2.0. Wish me luck ;) Thanks, Sanjay --- In flexcoders@yahoogroups.com, phipzkillah [EMAIL PROTECTED] wrote: I am also looking for this functionality. About a month ago I came across this page http://www.cflex.net/showFileDetails.cfm? ObjectID=299Object=FileChann\ elID=1 . It is a sample of a datagrid whose headers have a drop down list to filter each field/column on. Unfortuneately it was developed in Flex 1.5. Has anyone converted it to Flex 2.0? If so, this is the answer we all are looking for. If someone can copy that source code and eliminate the compiler errors you will be doing several of us a huge favor! Thanks Phil --- In flexcoders@yahoogroups.com, sanjaypmg sanjaypmg@ wrote: Hi There, Is there any way to put filters feature on Datagrid as available in Excel? Or Anything Similar to that feature? Please let me know if there is something or any possible solution for the same. Thanks Sanjay sharma