2009-10-28 98 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(); 
} 
相關問題