2012-02-21 4 views
2

Я пытаюсь разобраться на колонке в GWT с использованием их ListDataProvider Сортировка пример в качестве ссылкиGWT CellTable columnsorting

http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellTable.html#columnSorting

Проблема в том, что я могу видеть мои данные столбца таблицы становится сортируется (с помощью отладчик), но таблица никогда не обновляется. Глядя на пример в приведенной выше ссылке, они явно не обновляют отображение. Я что-то упустил?

Спасибо.

+1

Оставьте свой код? – DTing

ответ

3

Эти два примера бесполезны и сбивают с толку.

Использование ListHandlers и DataProviders также не очень полезно, когда показано, как использовать таблицы Cell/Grid.

В примерах запутывают и скрывают одну простую характеристику таблиц GWT Cell/Grid - вам просто нужно заменять и кормить список в таблицу каждый раз, когда данные меняются в любом случае.

Использование списков ListHandlers, обработчиков Async и DataProviders усложняет довольно простой процесс, бросая целую пушистую бесполезную абстрактную элегантность. По сути, эти абстрактные и отвратительные структуры сами толкают и возвращают записи в список таблиц. Не обращайте внимания на использование таймера.

Можете также взять список столиков своими быками и сделать это самостоятельно - гораздо проще. Я точно не помню, как я это делаю, потому что у меня нет моего кода.

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

Неважно, независимо от того, выполняете ли вы асинхронное или иное - любое изменение данных, которые вы хотите сделать, должно быть выполнено на этой буферной копии. Ваш GWT-RPC должен обновить этот буфер.

Когда таблица запрашивает восходящую сортировку, ваш компаратор/фильтратор будет производить восходящую копию вашего буферизованного списка для замены данных в таблице с помощью setRowData. Аналогично, когда таблица запрашивает нисходящую или для специализированной фильтрации.

Использование DataProvider полезно, если вы хотите разрешить ему управлять поисковым вызовом для вас. Гораздо проще обрабатывать GWT-RPC самостоятельно. DataProvider должен обрабатывать сортировку и фильтрацию, запрашивая сервер для отправки ему нового списка, который сортируется/фильтруется в соответствии с пожеланиями таблицы. Почему вы хотите использовать сетевой трафик, позволяя серверу управлять фильтрацией/сортировкой, если у вас не более 10 страниц записей.

Итак, для простого примера экспериментов с 50 примерами выполните управление списком буферов самостоятельно.

+0

Спасибо за ваш ответ. Я полностью согласен с вами, что иллюстрации не очень полезны, так верно ... Но сделано именно то, что вы сказали и на самом деле заработало. Еще раз спасибо. – kapricanon

+0

Тот, кто не очень много работал с таблицами Cell/Grid, проголосовал за меня. –

+0

Async важен, если ваши данные> ≈10K элементов (в зависимости от элементов), в противном случае вы будете замедлять свой интерфейс потенциально. У меня есть таблицы datagrid, которые делают оба. –

9

Мой опыт показывает, что обработчик сортировки (т. Е. ListHandler) чувствителен к списку, который имеет ListDataProvider при его создании.

Поэтому я рекомендую не удалять или не устанавливать новый список для ListDataProvider (конечно, я думаю, что он должен иметь хотя бы пустой (не нулевой) список при создании).

Просто используйте ListDataProvider.getList() и сделайте свою работу на нем.

Например, для удаления всех текущих строк и устанавливая новые данные, просто вызовите ListDataProvider.getList().clear(), а затем ListDataProvider.getList().addAll(yourNewData); не называют setList() или сортировка становится нерабочей.

+0

Хамзе, ты рокстар! Вы не знаете, сколько времени я искал для этого решения. Использование getList(). AddAll() вместо setList() сделал трюк для меня. – XiX

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