2008-10-06 81 views
0

我在包含多个条目的组合框中有一个过滤器。我不想使用完全匹配来过滤数据网格,而是希望获取选定的值,并只显示数据字段中包含所选值的记录。 例如:用户选择“新建”的值,数据网格显示记录内容​​可以是“新用户”,“新人”,“这是新的”等记录。 我认为我需要使用RegExp,但我无法解决如何使其正常工作。 由于提前, 小号...Flex:使用包含在数据域中的组合框过滤数据网格

回答

4

像这样的东西应该工作:

public function filter(item:Object):Boolean{ 
     var result:Boolean=false; 
     if (item.name.toUpperCase().indexOf(cbo.selectedLabel.toUpperCase()) >= 0) 
      result=true; 
     return result; 
} 

这个过滤器功能将搜索name属性(或者任何你想过滤的)与传递的对象组合框当前选定的标签,如果它找到该值,它将返回true。因此,如果它在字符串中的任何位置找到单词“New”,它将显示在数据网格中。 IE:“新人”,“新用户”都会出现一次过滤。

希望这是你在找什么。

3

您可以修改它以产生下拉筛选功能。 当前文本框过滤正在工作。所以我在这里发布。

声明2字符串变量 tempString和tempString_Name 然后...

使用下面的2个功能

private function filterByTerritory(item:Object):Boolean{ 
     tempString = item.name; 
     tempString_Name = item.territory; 
     if((tempString.indexOf(sampleFilter.text,0) != -1) && 
         (tempString_Name.indexOf(terrFilterTxt.text,0) != -1)){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 
    private function doFilter():void{ 
     if((sampleFilter.text.length == 0) && 
       (terrFilterTxt.text.length == 0)) { 
      myData.filterFunction == null; 
     } 
     else{ 
      myData.filterFunction = filterByTerritory; 
     } 
     myData.refresh(); 
    } 

接受通这2个文本框数据

<mx:TextInput id="sampleFilter" change="doFilter()"/> 
    <mx:TextInput id="terrFilterTxt" change="doFilter()"/> 

简而言之:请致电doFilte关于你想过滤发生的事件。

我很快就会过滤基于组合框的数据网格。 直到再见。我将很快成为会员:)

+0

这是friggin真棒,比我见过的任何东西都更好。为此欢呼,你救了我一个这样的麻烦,我觉得我欠你晚餐。 – D3vtr0n 2010-09-10 20:19:11