![](/img/trans.png)
[英]Flex : Filter a datagrid using a combobox value that is contained in a datafield
[英]Filter a dataGrid with a comboBox in flex
如何根據組合框中的值過濾數據網格? 有人可以給我展示一些很好的例子嗎?
在我的應用程序中,我已經根據用戶輸入的文本過濾了一個數據網格。 我檢查輸入的字符串是否與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;
}
這里的defendList是數據網格的數據提供者,revId,defId是數據網格的列。
現在,如何使用組合框進行過濾。 我有一個名為“優先級”的組合框,其值分別為“高”,“中”,“低”,“全部”。 如果我全選,則不執行任何過濾。 如果我選擇“高”,則僅應顯示具有優先級列值為“高”的那些字段。
編輯我甚至嘗試過這樣:
if(searchCriteria2.selectedItem.label=="Priority")
{
if (item.revType.toLowerCase().search(searchCriteria.selectedLabel.toLowerCase()) != -1)
{
Alert("yes");
isMatch=true
}
}
searchCriteria是comboBox,其中包含項目“ ALL”,“ HIGH” ...我有兩行,其值均為“ high”,並且兩次僅收到警報“ yes”。。但是在數據網格中,所有顯示四行。
您似乎在搜索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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.