Flex : Отфильтруйте сетку данных, используя значение комбинированного поля, содержащееся в поле данных

#regex #apache-flex #datagrid #combobox #filter

Вопрос:

У меня есть фильтр в выпадающем списке с несколькими записями. Вместо фильтрации сетки данных с точным совпадением я хотел бы взять выбранное значение и отображать только записи, в которых выбранное значение содержится в поле данных. Например: пользователь выбирает значение «Новый», и в таблице данных отображаются записи, в которых содержимое записи может быть «Новый пользователь», «Новый человек», «Этот новый» и т. Д. Я думаю, что мне нужно использовать регулярное выражение, но я не могу понять, как заставить его работать. Заранее спасибо, С…

Ответ №1:

Что — то вроде этого должно сработать:

  public function filter(item:Object):Boolean{
        var result:Boolean=false;
        if (item.name.toUpperCase().indexOf(cbo.selectedLabel.toUpperCase()) >= 0)
             result=true;
        return resu<
 }
 

Эта функция фильтра будет искать атрибут имени(или то, что вы хотите отфильтровать) объекта, переданного с выбранной в данный момент меткой выпадающего списка, и если она найдет это значение, она вернет значение true. Поэтому, если он найдет слово «Новый» в любом месте строки, оно появится в сетке данных. Т. е.: «Новый человек», «Новый пользователь» будут отображаться после фильтрации.

Надеюсь, это то, что вы ищете.

Ответ №2:

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

затем объявите 2 строковые переменные tempString и tempString_Name…

Используйте следующие 2 функции

  private function filterByTerritory(item:Object):Boolean{
        tempString = item.name;
        tempString_Name = item.territory;
        if( (tempString.indexOf(sampleFilter.text,0) != -1) amp;amp; 
                      (tempString_Name.indexOf(terrFilterTxt.text,0) != -1)){
            return true;
        }
        else{
            return false;
        }
     } 
     private function doFilter():void{
        if( (sampleFilter.text.length == 0) amp;amp; 
                (terrFilterTxt.text.length == 0)) {
            myData.filterFunction == null;
        }
        else{
            myData.filterFunction = filterByTerritory;
        }
        myData.refresh();
     }
 

Принимайте данные через эти 2 текстовых поля

 <mx:TextInput id="sampleFilter" change="doFilter()"/>
  <mx:TextInput id="terrFilterTxt" change="doFilter()"/>
 

в двух словах: вызовите doFilter для какого-либо события, для которого вы хотите, чтобы произошла фильтрация.

Скоро я опубликую фильтрацию сетки данных на основе поля со списком. А до тех пор пока. Я скоро стану участником 🙂

Комментарии:

1. это чертовски КРУТО и намного лучше, чем все, что я видел, приближаясь к этому. Выпьем за это, ты избавил меня от таких хлопот, я чувствую, что должен тебе ужин.