В чем разница между Grid
и Table
в Vaadin 7?
Что я должен использовать, а когда?
Сетка - это новый более мощный компонент, который должен быть преемником таблицы (см. Таблица мертва, долго жить сеткой). Таким образом, не должно быть необходимости поддерживать Table over Grid.
Вот первая из серии статей Vaadin aboout, мигрирующая из таблицы в сетку: https://vaadin.com/blog/-/blogs/mission-rip-table-migrate-to-grid-basic
Сетка → Новая и удивительная
Таблица → Достопочтенные и надежные
Table
- очень хороший виджет отображения сетки данных, встроенный в самые ранние версии Vaadin.
Grid
- это великолепная переписывание с нуля, предназначенная для замены таблицы. Команда Vaadin использует свою мудрость, полученную из опыта, "если бы мы знали тогда то, что знаем сейчас", чтобы сделать самую лучшую сетку данных возможной благодаря сегодняшним веб-технологиям. Сетка такая большая, что она получает собственную страницу тщеславия. См. это сообщение в блоге компании для быстрого обзора.
Итак, вообще говоря, я предлагаю вам сосредоточиться на Grid. Попробуйте, сначала изучите его и посмотрите, соответствует ли он вашим потребностям. Если вы столкнулись с ошибками или проблемами или вам нужны функции, отсутствующие в Grid, тогда вернуть в таблицу. Вы можете смешивать и сопоставлять как в проекте, так и предостережение о том, что различный внешний вид и поведение могут смущать ваших пользователей.
Подумайте Сетка как преждевременный подросток многообещающим и готовы совершить прыжок во взрослую жизнь, и Таблица как зрелый взрослый рабочий жесткий в ее расцвете лет в середине и мечтает о том, чтобы заработанный в будущем будущий выход на пенсию пал на закат.
Если вы используете Vaadin 6, в продолжающемся проекте или вам нужно поддерживать очень старые браузеры, тогда Table
- ваш единственный выбор. Grid
требуется Vaadin 7 или новее.
Вот некоторые основные функции таблицы, которые в настоящее время отсутствуют в Grid.
Оба имеют множество функций. Они практикуют ленивую загрузку в браузер, автоматически загружая данные только по мере необходимости с серверной стороны, чтобы не перегружать веб-браузер. Оба позволяют пользователю перетаскивать столбцы для повторного заказа. Оба позволяют пользователю показывать/скрывать столбцы.
Оба позволяют выбирать отдельные строки или несколько строк.
Сетка также имеет автоматическую функцию, где она добавляет столбец флажков. Пользователь может выбрать несколько строк, щелкнув эти флажки, а не используя мышь или клавиатуру + клавиатуру. Многие, если не большинство, пользователи неуклюжие с помощью выбора нескольких строк с помощью мыши. Смотрите этот снимок экрана и обратите внимание на первую колонку.
Поддержка программирования для выбора отличается. Сетка не распространяется AbstractSelect
, вместо этого определяет свой собственный API выбора. Вызовите addSelectionListener()
и определите SelectionListener
, См. Книга Ваадина.
Оба имеют верхние и нижние колонтитулы, но у Grid есть больше возможностей. Сетка может размещать виджеты вместо текста. Сетка может иметь несколько строк заголовков. Сетка может присоединяться к ячейкам заголовка, например, к HTML-таблице.
Оба обеспечивают редактирование данных на месте, но по-разному. Таблица позволяет редактировать данные в ячейке. Grid выбрала другой подход, чтобы отредактировать всю строку, отобразив мини-окно, небольшую форму ввода данных. Эта форма включает пару кнопок подтверждения и отмены. Эта форма гораздо более гибкая, чем редактирование ячеек таблиц.
Grid предлагает контролируемую пользователем фильтрацию, в которой рядом с заголовками появляется ряд входящих элементов. Когда пользователь вводит фильтр, применяется для отображения только совпадающих строк. См. этот скриншот. В таблице вам нужно создать какой-то пользовательский интерфейс и применить фильтрацию.
UPDATE: Vaadin 8 предлагает новую версию Grid, которая использует недавно улучшенную и значительно упрощенную модель данных, Это основная причина использования Grid вместо таблицы. Обратите внимание, что как исходная сетка, так и таблица по-прежнему доступны в Vaadin 8 через уровень совместимости Vaadin 7.
Следующая старая информация оставлена без изменений...
Обе таблицы и сетки являются виджетом только для представления, поддерживаемым отдельным объектом данных, реализующим интерфейс Container
в соответствии с Модель данных Vaadin.
Класс Table также действует как Контейнер, который меня всегда путал. Я рад видеть, что Grid поддерживает более четкое разделение.
Подобно таблице, Grid предлагает некоторые удобные методы для быстрых и грязных ситуаций, когда вы хотите бросить некоторые данные в Grid без формального создания Container. Но удобные методы Grids используют строки и столбцы в отличие от элементов Containers и условий использования. Эти термины дают более четкое представление о том, что вы разговариваете с сеткой, но сетка действует по умолчанию, приложив IndexedContainer
экземпляр от вашего имени.
ОБНОВЛЕНИЕ: В Vaadin 8.1 Grid получает возможность отображать компонент в ячейке. См. живую демонстрацию Component Renderer.
Обработка содержимого ячейки различна. Сетка не может напрямую отображать значки столбцов и не может размещать компоненты (виджеты) в ячейке. Вместо этого использовались новые функции Renderer
.
У обоих есть глава в The Book Of Vaadin, one для таблицы и один для сетки.
У обоих есть живые демонстрации. Один для таблицы (и TreeTable). И пара для Grid, одно полное окно и одно с различными аспекты.
Смотрите эту страницу брошюры для Grid, включая встроенную живую демонстрационную версию, со ссылкой на другие демонстрации.
Сетка имеет встроенный виджет для отображения числа в виде небольшого виджета термометра. См. этот снимок экрана в последнем столбце.
Более подробные различия см. в разделе 5.24.1 Обзор - Различия в таблице в "Книга Ваадина" .
Эзотерика... Сетка - это первый компонент в Vaadin Components, набор высококачественных веб-компонентов, построенный на Google Polymer, который готов к использованию с любой инфраструктурой, поддерживающей Веб-компоненты. В то время как команда Ваадина обещала поддержать Таблицу в будущем, не ожидайте, что она получит такое особое внимание.
В Vaadin 8.0 и 8.1 сетка становится еще лучше. Основные улучшения включают в себя:
grid.addColumn( Person::getFirstName ).setCaption( "First Name" );
Container
отсутствует: grid.setDataProvider( ( sortorder , offset , limit) -> service.findAll( offset , limit) , () -> service.count() );
Компонент Table по-прежнему доступен через уровень совместимости в Vaadin 8 для продолжения использования классов Vaadin 7.
Команда Vaadin имеет большие планы для Grid, поэтому многое из того, что вы читаете на странице StackOverflow, изменится. Команда будет с нетерпением добавлять функции, улучшения и исправления ошибок в ближайшие месяцы и годы. Многие улучшения уже сделаны в Grid за короткую историю, поэтому будьте осторожны при чтении старых документов об ограничениях или отсутствующих функциях - это может быть не так.
На самом деле можно реализовать все, что вы хотите, с обоими из них. Но мой опыт в том, что Grid более удобна в использовании.
Таблица проста в использовании и проста в использовании для простых таблиц (как вы могли догадаться). Итак, , если вы просто хотите показать несколько строк данных, которые визуализируются красиво - используйте таблицу. Она стабильна и хорошо работает на этом.
Сетка выглядит как таблица, но она имеет некоторые функции в таблице. Если у вас есть много данных для рендеринга, Grid может справиться с этим лучше. Также есть хорошая практика для "встроенного редактирования" ваших данных. Существует способ интенсивно настраивать заголовки сетки. Если вы хотите сделать много настроек и взаимодействия внутри табличного компонента, используйте Grid.
Смотрите функции здесь:
http://demo.vaadin.com/sampler/#ui/grids-and-trees/grid
Существует разница в том, как вы можете выбирать строки/ячейки в этих двух компонентах. Например, EventListeners для выбора используются немного иначе в отношении возвращаемого значения. Также есть разница в том, как вы добавляете к ним столбцы и строки, но это всего лишь вещь реализации, поэтому это не имеет большого значения.
В таблице фильтров, если мы нажмем на заголовок таблицы, первая строка будет выделена по умолчанию с помощью метода setSelectable (true);, но в таблице grid нет такого типа действий,
Я хочу применить одно и то же действие в таблице сетки. Есть ли возможность иметь такую природу? Есть ли какой-либо метод или код?
Ниже приведен код, который я использовал в моей таблице сетки:
private void buildPagedGrid(Class<T> clazz) {
setWidth("100%");
setSelectionMode(SelectionMode.SINGLE);
setImmediate(true);
setSizeFull();
setContainerDataSource(dataSource);
setFooterVisible(true);
}