2013-03-06 4 views
0

Я хотел бы сделать какую-то таблицу (возможно, FlexTable) и иметь возможность применять фильтр (любую строку) и мгновенно удалять строки, которые не содержат эту строку. Я проверил подобные вопросы, но они очень старые (3-4 года назад).Мгновенная фильтрация таблицы в GWT

Вы можете увидеть пример в DataTables плагин для JQuery: http://www.datatables.net/

Я просто нужен фильтр, так что я думаю, что я могу сделать это с помощью TextBox и KeyPressHandler для обнаружения нажатых клавиш, и показывают только строки, которые содержат ввод текста при вводе.length()> = 3.

У кого-то есть лучшая идея или подход?

Спасибо.

ответ

3

Я настоятельно рекомендую использовать CellTable или DataGrid. С их помощью вы можете связать ListDataProvider, в котором вы можете поместить всю логику для фильтрации.

Вы должны создать свою собственную реализацию DataListProvider, где вы пройдете String или обычай Filter, если вы хотите более сложную фильтрацию. Вам нужно создать
filter(String filterExpression) и вызвать его из таблицы, когда вы хотите отфильтровать строки.

public class MyListDataProvider<T> extends DataListProvider<T>{ 

    public void filter(String filterExpression){ 

     // Here you filter your local list containing the data use 
     List<T> list = getList(); 

     ... 

     // Refresh all of the objects associated to this ListDataProvider 
     refresh(); 

    } 

} 

Вы можете оставить дополнительный List<T>, содержащий все элементы без какой-либо фильтрации, так что вы можете получить доступ к отфильтрованным элементам, когда вы хотите «unfilter» или изменить выражение фильтра.

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

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