Фильтровать сетку данных с помощью комбинированного списка в flex - PullRequest
1 голос
/ 28 октября 2009

Как я могу отфильтровать сетку данных на основе значения в поле со списком? Кто-нибудь может показать мне несколько хороших примеров?

В моем приложении я уже фильтрую сетку данных на основе текста, введенного пользователем. Я проверяю, соответствует ли введенная строка записи в столбце таблицы данных, и если совпадение найдено, вызывается функция filterFunction на поставщике данных. Все это я сделал только с помощью учебника, так как я учусь гибкому, как я делаю свой проект.

Это тот код:

<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;  

}

ЗдесьfectList - поставщик данных для таблицы данных, revId, defId - столбцы таблицы данных.

Теперь, как мне отфильтровать, используя поля со списком. У меня есть поле со списком «приоритет» со значениями «высокий», «средний», «низкий», «все». Если я выберу все, фильтрация не производится. Если я выберу "высокий", то должны появиться только те поля со значением столбца priprity, как "высокий".

EDIT Я даже пытался так:

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

searchCriteria - это поле со списком, в котором у меня есть пункты "ALL", "HIGH" ... У меня есть две строки со значением «высокий», и я получаю предупреждение «да» только два раза .. Но в сетке данных отображаются все четыре строки.

1 Ответ

0 голосов
/ 30 октября 2009

Похоже, что вы ищете в столбце revType, а не в столбце Приоритет.

Возможно, стоит найти способ уменьшить количество дублирующегося кода в вашем приложении, чтобы избежать подобных ошибок. Например, ваш список полей может выглядеть так:

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