#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. это чертовски КРУТО и намного лучше, чем все, что я видел, приближаясь к этому. Выпьем за это, ты избавил меня от таких хлопот, я чувствую, что должен тебе ужин.