Мгновенная фильтрация таблиц в GWT

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

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

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

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

Спасибо.


person jav_000    schedule 06.03.2013    source источник


Ответы (1)


Я настоятельно рекомендую использовать 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>, содержащий все элементы без какой-либо фильтрации, чтобы вы могли получить доступ к отфильтрованным элементам, когда хотите «отменить фильтрацию» или изменить выражение фильтра.

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

person enrybo    schedule 06.03.2013