Flex: отфильтруйте сетку данных, используя значение поля со списком, которое содержится в поле данных - PullRequest
0 голосов
/ 07 октября 2008

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

Ответы [ 2 ]

4 голосов
/ 07 октября 2008

Примерно так должно работать:

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

Эта функция фильтра будет искать атрибут имени (или то, что вы хотите отфильтровать) объекта, переданного с выбранной в данный момент меткой в ​​поле со списком, и если она найдет это значение, она вернет true. Так что, если он найдет слово «New» где-нибудь в строке, он появится в таблице данных. IE: "New Person", "New User" будут отображаться после фильтрации.

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

3 голосов
/ 26 января 2010

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

объявить 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) && 
                      (tempString_Name.indexOf(terrFilterTxt.text,0) != -1)){
            return true;
        }
        else{
            return false;
        }
     } 
     private function doFilter():void{
        if( (sampleFilter.text.length == 0) && 
                (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 для некоторого события, для которого вы хотите, чтобы произошла фильтрация.

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

...