【问题标题】:Filter a dataGrid with a comboBox in flex在 flex 中使用组合框过滤 dataGrid
【发布时间】:2010-07-18 02:19:45
【问题描述】:

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

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

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

编辑 我什至试过这样:

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

searchCriteria 是组合框,其中我有项目,“ALL”,“HIGH”... 我有两行值“高”,我只收到两次警报“是”.. 但在数据网格中,所有四行都显示出来了。

【问题讨论】:

    标签: apache-flex combobox filtering


    【解决方案1】:

    您似乎在搜索 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-02
      • 2020-06-06
      • 1970-01-01
      • 2013-01-23
      • 2011-04-30
      • 2011-01-01
      • 2016-01-05
      • 2014-01-13
      相关资源
      最近更新 更多