使用flex中的comboBox过滤dataGrid

时间:2009-10-28 11:11:55

标签: flex combobox filtering

如何根据组合框中的值过滤数据网格?有人能告诉我一些很好的例子吗?

在我的应用程序中,我已经根据用户输入的文本过滤了数据网格。我检查输入的字符串是否与datagrid的列条目匹配,如果找到匹配项,则调用dataprovider上的filterFunction。所有这些只是在教程的帮助下完成的,因为我正在学习flex,就像我做项目一样。

这就是代码:

<mx:FormItem direction="horizontal">
    <mx:ComboBox id="searchCriteria1" dataProvider="{criteriaDP1}" change="searchFunction()"/>
    <mx:TextInput id="search" change="searchFunction()"/> 
    <mx:Button label="Clear Search" click="clear()" /> 
</mx:FormItem> 

private function searchFunction():void{
defectList.filterFunction = filterItems;
defectList.refresh();
}

private function filterItems(item:Object):Boolean
{
var isMatch:Boolean = false         

     if(searchCriteria1.selectedItem.label == "Defect Id")
{ 
    if(item.defId.toString().search(search.text.toString()) != -1)
    {
        isMatch = true
    } 
}
else if(searchCriteria1.selectedItem.label == "Review Id")
{
    if(item.revId.toString().search(search.text.toString()) != -1)
    {
        isMatch = true
    } 
}
     return isMatch;  

}

这里的defectList是数据网格的数据提供者,revId,defId是数据网格的列。

现在如何使用组合框过滤。我有一个名为“priority”的组合框,其值为“high”,“medium”,“low”,“all”。如果我选择全部,则不进行过滤。如果我选择“高”,则只显示具有priprity列值为“high”的字段。

修改 我甚至试过这样:

 if(searchCriteria2.selectedItem.label=="Priority")
 {
      if (item.revType.toLowerCase().search(searchCriteria.selectedLabel.toLowerCase()) != -1)
 {
              Alert("yes");
    isMatch=true
 }
 }

searchCriteria是comboBox,我有条目“ALL”,“HIGH”...... 我有两行值“高”,我只得到警报“是”两次。 但是在数据网格中,所有四行都会显示出来。

1 个答案:

答案 0 :(得分:0)

您似乎正在搜索revType列,而不是Priority列。

可能有必要找到一种方法来减少应用中重复代码的数量,以帮助避免此类错误。例如,您的字段列表可能如下所示:

[Bindable]
var criteriaDP1:ArrayCollection = new ArrayCollection([{label:"Review ID", value:"RevID"},
                                                       {label:"Defect Id", value:"DefID"}]); 

像这样设置会让你使用value字段作为dataProvider的索引,如下所示:

public function search_clickHandler():void
{
    defectList.filterFunction = function(item:Object):Boolean
    {
        var gridValue:String = item[searchCriteria.selectedItem.value].toString().toLowerCase();
        var searchValue:String = search.text.toLowerCase(); 
        if(gridValue.search(searchValue) != -1)
        {
            return true;                        
        }
        return false;
    };
    defectList.refresh();
}