Hi all - I have two questions to post today, but will keep them separate. I'm using some filter as you type code from Ben Forta and cflex.net. The following code is basically an InputText search box along with a combobox, and they both are filtering a datagrid's arraycollection. What I want to do is add a second combobox to the process. It never seems to work correctly, but each combobox, along with the text search seems to work on their own. Note that in the code below, the course combobox is commented out.
I suppose what I don't understand is how exactly the processFilter function works. dgObjectList = DataGrid with 3 columns: objName, typeName, courseName objectList = DataGrid's dataprovider cbTypeList = Combobox with labelField=typeName. Data includes typeID typeListFilter = cbTypeList's dataprovider cbCourseList = Combobox with labelField = courseName. Data includes courseID courseListFilter = cbCourseList's dataprovider searchText = textInput box for keyword search. Code is as follows. Thanks for reading, - Chris [Bindable] private var objectList:ArrayCollection; [Bindable] private var typeListFilter:ArrayCollection; [Bindable] private var courseListFilter:ArrayCollection; private function resultHandlerGetAllObjects(event:ResultEvent):void { objectList = event.result as ArrayCollection; /* add function for filtering */ objectList.filterFunction=processFilter; } private function resultHandlerGetAllTypesFilter (event:ResultEvent):void { typeListFilter = event.result as ArrayCollection; } private function resultHandlerGetAllCoursesFilter (event:ResultEvent):void { courseListFilter = event.result as ArrayCollection; } /* Code from: http://www.forta.com/blog/index.cfm/2006/7/13/Filtering-Data-In-Flex http://www.cflex.net/showFileDetails.cfm? ObjectID=415&Object=File&ChannelID=1 */ private function processFilter(item:Object):Boolean { var result:Boolean=false; dgObjectList.selectedIndex = -1; if(item.objName.length == 0 || item.objName.toUpperCase().indexOf (searchText.text.toUpperCase()) >= 0) { if(cbTypeList.selectedItem.typeName != "Show All") { return item.typeName == cbTypeList.selectedItem.typeName; } else if(cbTypeList.selectedItem.typeName == "Show All") { return true; } /* Course ComboBox - works on its own, but not WITH the other combobox! if(cbCourseList.selectedItem.courseName != "Show All") { return item.courseName == cbCourseList.selectedItem.courseName; } else if(cbCourseList.selectedItem.courseName == "Show All") { return true; } */ } return result; } Code in App: <mx:HBox width="100%"> <mx:Label text="Search:"/> <mx:TextInput id="searchText" width="100%" change="objectList.refresh();"/> </mx:HBox> <mx:HBox width="100%"> <mx:Label text="Type:"/> <mx:ComboBox id="cbTypeList" width="100%" dataProvider="{typeListFilter}" labelField="typeName" change="objectList.refresh();"/> </mx:HBox> <mx:HBox width="100%"> <mx:Label text="Course:"/> <mx:ComboBox id="cbCourseList" width="100%" dataProvider="{courseListFilter}" labelField="courseName" change="objectList.refresh();"/> </mx:HBox> <mx:HBox width="100%" height="100%"> <mx:DataGrid id="dgObjectList" width="100%" height="100%" dataProvider="{objectList}" change="displayObject();"> <mx:columns> <mx:DataGridColumn headerText="Name" wordWrap="true" dataField="objName"/> <mx:DataGridColumn headerText="Type" dataField="typeName"/> <mx:DataGridColumn headerText="Course" dataField="courseName"> </mx:columns> </mx:DataGrid> </mx:HBox>