2008-10-06 1 views
0

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

ответ

4

Что-то, как это должно работать:

функция
public function filter(item:Object):Boolean{ 
     var result:Boolean=false; 
     if (item.name.toUpperCase().indexOf(cbo.selectedLabel.toUpperCase()) >= 0) 
      result=true; 
     return result; 
} 

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

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

3

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

объявить 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()"/> 

nutshell: call doFilte r на каком-то событии, на котором вы хотите, чтобы фильтрация произошла.

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

+0

это ужасно УДИВИТЕЛЬНО и лучше, чем все, что я видел, приближаясь к этому. Ради этого, ты спас мне такую ​​суету, я чувствую, что я должен тебе обедать. – D3vtr0n 2010-09-10 20:19:11

Смежные вопросы