Código Flex :
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="400" minHeight="600" width="400" height="370" xmlns:flexlib="http://code.google.com/p/flexlib/" viewSourceURL="srcview/index.html" xmlns:sexoservice="services.sexoservice.*" xmlns:filtroservice="services.filtroservice.*"> <s:layout> <s:VerticalLayout/> </s:layout> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.events.FlexEvent; import mx.utils.StringUtil; //variable en la que guardaremos el token a buscar private var str2search:String = ""; //dejamos la variable como Bindable para que detecte automaticamente los cambios al proveedor /** * Este metodo se disparara cada vez que se escriba algo en la caja de texto de busqueda */ protected function tiBuscar_changeHandler(event:Event):void { //recuperamos el texto de la caja de busqueda y lo convierto a minusculas str2search = StringUtil.trim(tiBuscar.selectedItem.sexo).toLowerCase(); //validamos que no este vacia if (str2search != "") { //si no esta vacia, aplicamos la funcion getAllFiltroResult.lastResult.filterFunction = busca; } else { //si esta vacia, quitamos la funcion de filtrado getAllFiltroResult.lastResult.filterFunction = null; } //despues de cualquier filterFunction, se tiene que aplicar el metodo refresh getAllFiltroResult.lastResult.refresh(); } private function busca(item:Object):Boolean { //variable de retorno var ret:Boolean = false; //variable que almacenara el nombre de cada indice del elemento var p:String = ""; //variable que almacenara el valor del elemento var str:String = ""; //recorro cada indice del elemento for (p in item) { //no quiero que busque en la propiedad mx_internal_uid if (p != "mx_internal_uid") { //recupero el valor del elemento y lo convierto a minusculas str = String(item[p]).toLowerCase(); //veo si la cadena de busqueda existe en el valor del elemento if (str.indexOf(str2search) != -1) { //si existe, regreso un true para que el elemento sea agregado al proveedor ret = true; //termino el ciclo, no hay necesidad de seguir buscando break; } } } //regreso el valor Boolean return ret; } protected function tiBuscar_creationCompleteHandler(event:FlexEvent):void { getAllSexoResult.token = sexoService.getAllSexo(); } protected function comboBox_creationCompleteHandler(event:FlexEvent):void { getAllFiltroResult.token = filtroService.getAllFiltro(); } ]]> </fx:Script> <fx:Declarations> <s:CallResponder id="getAllSexoResult"/> <sexoservice:SexoService id="sexoService" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/> <s:CallResponder id="getAllFiltroResult"/> <filtroservice:FiltroService id="filtroService" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/> </fx:Declarations> <s:ComboBox dataProvider="{getAllFiltroResult.lastResult}" labelField="nombre" width="100%" creationComplete="comboBox_creationCompleteHandler(event)" /> <s:ComboBox dataProvider="{getAllSexoResult.lastResult}" width="220" id="tiBuscar" labelField="sexo" change="tiBuscar_changeHandler(event)" creationComplete="tiBuscar_creationCompleteHandler(event)"/> <mx:DataGrid id="dataGrid" dataProvider="{getAllFiltroResult.lastResult}"> <mx:columns> <mx:DataGridColumn headerText="cod_persona" dataField="cod_persona"/> <mx:DataGridColumn headerText="nombre" dataField="nombre"/> <mx:DataGridColumn headerText="sexo" dataField="sexo"/> </mx:columns> </mx:DataGrid> </s:Application>