2009-10-28 73 views
1

如何根据组合框中的值过滤数据网格?任何人都可以向我展示一些很好的例子吗?使用flex中的组合框过滤数据网格

在我的应用程序中,我已经根据用户输入的文本过滤了一个数据网格。我检查输入的字符串是否与数据网格的列条目相匹配,如果找到匹配,则调用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是数据网格的列。

现在我该如何过滤组合框。我有一个名为“优先级”的值为“高”,“中”,“低”,“全部”的组合框。如果我全选,则不进行过滤。如果我选择“高”,那么只应出现priprity列值为“高”的字段。

编辑 我甚至尝试这样的:

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

searchCriteria是ComboBox,在那里我有项目, “ALL”, “HIGH” ...... 我有两列值“高“,我得到的警报”是“只有两次.. 但在数据网格中显示所有四行。

回答

0

您似乎是在revType列而不是优先级列上进行搜索。

可能需要找到一种方法来减少应用程序中重复代码的数量,以避免此类错误。例如,你的字段列表看起来是这样的:

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

设置它像它可以让您使用value领域作为你的数据提供程序的索引,这样的:

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(); 
}