DataTable (с пагинацией)
Виджет DataTable используется для отображения данных в формате таблицы. Он организует информацию в строки и столбцы, подобно таблице электронных таблиц, что упрощает чтение и понимание больших объемов данных.
Например, его можно использовать для отображения списка сотрудников компании, где каждая строка представляет одного сотрудника, а столбцы показывают имя сотрудника, возраст, отдел и зарплату.
Кроме того, этот виджет поддерживает пагинацию, которая позволяет обрабатывать большие наборы данных, отображая их порциями удобного размера.

Добавление виджета DataTable
Давайте разберем, как добавить виджет DataTable, на примере отображения списка всех сотрудников компании. Вот как это выглядит:
Шаги по добавлению DataTable и отображению данных сотрудников:
- Откройте Widget Palette и найдите виджет DataTable на вкладке Layout Elements. Вы можете перетащить его в нужное место или добавить напрямую из дерева виджетов или области холста.
- Он добавляет два типа предопределенных виджетов:
- DataTableHeader: Это верхняя строка таблицы, которая отображает названия столбцов. Чтобы изменить текст, щелкните на виджете DataTableHeader > Text, перейдите в панель свойств и укажите имя.
- DataTableCell: Это отображает фактические данные. По умолчанию он содержит виджет Text. Однако вы можете заменить его на любой другой виджет в зависимости от ваших требований.

- По умолчанию отображается три столбца. Чтобы показать больше, выберите виджет DataTable, перейдите в панель свойств > Paginated Data Table Properties > и укажите Number of Columns, которое вы хотите.
- Для демонстрации отобразим данные из Firestore:
- Сначала убедитесь, что вы создали коллекцию.
- Важно отметить, что в отличие от других виджетов, вы не можете напрямую выполнить запрос к серверу на виджете DataTable. Потому что в этом случае у вас не будет доступа к результату запроса (списку сотрудников) для дальнейшего использования, например, для сортировки и поиска. Поэтому рекомендуется получать результат запроса к серверу на родительском виджете, а затем использовать этот результат для заполнения DataTable.
- В этом примере при загрузке страницы мы добавим действие Query Collection и сохраним результат в переменную состояния страницы.
- На виджете DataTable сгенерируйте динамические дочерние элементы с использованием переменной состояния страницы (которая содержит список сотрудников).
- Отобразите данные в DataTableCell > Text.
Сортировка
Сортировка в DataTable работает следующим образом: сначала вы отмечаете столбец для сортировки. Затем, когда пользователь нажимает на заголовок, вы получаете обратный вызов OnSortChanged с двумя свойствами: Sorted Column Index и Is Ascending. Вы используете оба свойства в пользовательской функции для реализации логики сортировки.
Sorted Column Indexуказывает столбец, по которому следует сортировать данные (0 для первого столбца, 1 для второго и так далее).Is Ascendingопределяет направление сортировки (true для возрастающего порядка, false для убывающего).
Помните, сортировка не выполняется автоматически виджетом DataTable. Он предоставляет гибкость для реализации собственной логики сортировки с помощью Custom Function.
Давайте расширим предыдущий пример и посмотрим, как включить сортировку по столбцам. Вот как это выглядит:
Чтобы включить сортировку:
- Выберите DataTableHeader, перейдите в Properties Panel и включите переключатель Sortable. Примените это к каждому столбцу, который вы хотите сортировать.
- Выберите виджет DataTable, выберите Actions в панели свойств и откройте Action Flow Editor.
- Выберите On Sort Changed. Действия, добавленные под этим, будут срабатывать каждый раз, когда пользователь нажимает на заголовок столбца с включенной сортировкой.
- В этом примере мы обновляем ту же переменную состояния страницы (которая заполняет DataTable) отсортированными данными с помощью следующей пользовательской функции.
List<EmployeesRecord> sortMyData(
List<EmployeesRecord> listToSort,
bool isAsc,
int sortColumIndex,
) {
/// MODIFY CODE ONLY BELOW THIS LINE
// Sort by 'name' for 0, 'age' for 1, 'position' for 2 in code.
switch (sortColumIndex) {
case 0:
listToSort.sort((a, b) => a.name.compareTo(b.name));
break;
case 1:
listToSort.sort((a, b) => a.age.compareTo(b.age));
break;
case 2:
listToSort.sort((a, b) => a.position.compareTo(b.position));
break;
default:
break;
}
if (!isAsc) {
listToSort = listToSort.reversed.toList();
}
return listToSort;
/// MODIFY CODE ONLY ABOVE THIS LINE
}
Поиск
Вы можете добавить функцию поиска в виджет DataTable с помощью нашей функции Simple Search. Однако для этого конкретного виджета вместо виджета Conditional Builder вы можете напрямую использовать Conditional Value, чтобы определить, какой результат отображать на основе переменной IsShowFullList.
