Объект табличного представления

Табличные представления представляют собой визуализацию набора записей, расположенных в виде строк и столбцов.

Библиотека позволяет взаимодействовать с такими представлениями.

Режимы табличного представления

Табличное представление может находиться в одном из режимов, определяемом перечислением Grid.Mode. Получить текущий режим можно методом Grid.getGridMode().

Доступные режимы:

  • Grid — стандартный список (режим по умолчанию).

  • Card — карточный режим.

  • Transpose — транспонированный список.

  • AutoFilter — автофильтр.

  • Unknown — режим не определён.

Карточный режим

Added in version 1.1.3.

В карточном режиме (Mode.Card) табличное представление отображает одну запись, где каждый атрибут записи представлен отдельной строкой. Принципиальное отличие карточного режима от остальных режимов заключается в следующем:

  1. Структура строк: каждая строка таблицы соответствует одному атрибуту записи, а не одной записи набора, как в стандартном режиме.

  2. Структура ячеек: каждая строка состоит из двух ячеек — ячейка с индексом 0 содержит заголовок атрибута (caption), ячейка с индексом 1 содержит значение атрибута.

  3. Отсутствие колонок: в карточном режиме не применимо понятие колонок, поэтому методы, работающие с колонками, недоступны.

В связи с этими отличиями, ряд методов библиотеки работает только в карточном режиме, а ряд методов, напротив, недоступен. При вызове недопустимого метода выбрасывается исключение GridModeException.

Методы, работающие только в карточном режиме

Added in version 1.1.3.

Метод

Описание

Rows.getByAttributeName(String)

Получить строку по названию атрибута

Rows.getByAttributeCaption(String)

Получить строку по заголовку атрибута

Grid.getCell(String)

Получить ячейку значения атрибута по названию атрибута

Методы, недоступные в карточном режиме

Added in version 1.1.3.

Метод

Описание

Grid.getColumns()

Получение списка колонок недопустимо в карточном режиме

Grid.getCell(int, String)

Получение ячейки по индексу строки и названию атрибута; используйте Grid.getCell(String)

Row.getCellByName(String)

Получение ячейки по названию атрибута; используйте Rows.getByAttributeName(String)

Row.getCellWidths(String...)

Получение ширин ячеек по именам атрибутов недопустимо в карточном режиме

Ключевые классы

Ключевыми классами для работы с таблицами являются:

  1. Grid — таблица.

  2. Column — столбец таблицы.

  3. Row — строка таблицы.

  4. Cell — ячейка.

Пример использования в стандартном режиме

Пример работы с таблицей в стандартном режиме (не для карточного режима)
application.mainForm().mainMenu().itemByCaption("Редакторы", "В списке").click();
Form listForm = application.waitMdiForm("gtk-ru.bitec.app.gs3.qa.controls.Gs3_QaEditorsTest", "List");
Frame frame = listForm.mainSelection().layout().frame();

Grid grid = frame.view().cast();

Columns columns = grid.getColumns();
int numberOfColumns = columns.size();

Rows rows = grid.getRows();
int numberOfRows = rows.size();

Row row = grid.getRowByVisibleIndex(6);
row.click();

int selectedRowVisibleIndex = grid.getSelectedRowVisibleIndex();
int selectedRowAbsoluteNumber = grid.getSelectedRowAbsoluteNumber();

Row row2 = grid.getRowByAbsoluteNumber(selectedRowAbsoluteNumber - 1);
Cell cell = row2.getCellByVisibleIndex(2);

int selectedColumnVisibleIndex = grid.getSelectedColumnVisibleIndex();

List<Cell> cells = row2.getCells();

int totalCount = grid.getTotalCount();
int windowSize = grid.getWindowSize();

Этот пример демонстрирует базовые способы взаимодействия с таблицей в стандартном режиме. Для карточного режима используйте подход, описанный в Пример использования в карточном режиме.

Attention

  1. Перерисовка: Интерфейс таблицы может обновляться автоматически. Это требует выполнения ожидания окончания происходящих изменений.

  2. Индексация и нумерация: Строки таблицы можно выбирать как по видимому индексу, так и по абсолютному номеру.

    Видимый индекс удобен, когда речь идет об отображенных записях. Абсолютный номер удобен, если запись еще не подгружена с сервера. Подробнее об индексах и номерах строк можно узнать в справочнике по API: Grid.

Полный пример проекта example7 можно найти в коллекции примеров проектов.

Пример использования в карточном режиме

Added in version 1.1.3.

В карточном режиме поиск строки таблицы осуществляется по атрибуту, а не по индексу колонки. Ниже приведены примеры основных операций с табличным представлением в карточном режиме.

Поиск строки по атрибуту

Строку карточного режима можно найти по названию атрибута или по его заголовку, отображаемому в левой колонке карточки.

Поиск строки таблицы в карточном режиме
Grid grid = frame.view().cast();

// Поиск строки по названию атрибута
Row rowByAttributeName = grid.getRows().getByAttributeName("PMEMOBOX");

// Поиск строки по заголовку атрибута (наименованию в левой колонке)
Row rowByCaption = grid.getRows().getByAttributeCaption("PMemoBox");

// Получение ячейки значения атрибута
// В карточном режиме строка содержит две ячейки:
// индекс 0 — заголовок атрибута, индекс 1 — значение атрибута
Cell valueCell = rowByAttributeName.getCells().get(1);

// Краткий способ получения ячейки значения по названию атрибута
Cell cell = grid.getCell("PMEMOBOX");

Чтение и установка значения редактора

В карточном режиме для установки значения используется редактор ячейки, полученный методом Cell.field(). Тип редактора определяется автоматически.

Установка значений в редакторы атрибутов таблицы в карточном режиме
Grid grid = frame.view().cast();

// TextBox — текстовое поле
Cell textCell = grid.getRows().getByAttributeName("PTEXTBOX").getCells().get(1);
TextBox textBox = textCell.field();
textBox.setValue("Новое значение");
assertEquals("Новое значение", textCell.value());

Attention

При работе с редакторами в карточном режиме недопустимо получение редактора для ячейки с индексом 0 (заголовок атрибута) — при попытке вызова Cell.field() на такой ячейке будет выброшено исключение ElementNotFoundException.

Проверка режима табличного представления

Перед использованием методов, зависящих от режима табличного представления, рекомендуется проверять текущий режим:

Проверка режима табличного представления
Grid grid = frame.view().cast();
Grid.Mode mode = grid.getGridMode();

if (mode == Grid.Mode.Card) {
    // Использование методов карточного режима
    Row row = grid.getRows().getByAttributeName("PTEXTBOX");
    Cell cell = row.getCells().get(1);
} else {
    // Использование методов стандартного режима
    Columns columns = grid.getColumns();
    Cell cell = grid.getCell(0, "PTEXTBOX");
}

See also

Особенности некоторых взаимодействий с элементами табличного представления

Перетаскивание колонок

Для тестирования drag’n’drop функционала колонок (при изменении их порядка или при перетаскивании заголовка в область группировки) появляется необходимость в привнесении дополнительных движений мышью, чтобы элемент заголовка стал доступен для сброса в нужную область.

Note

Перетаскивание колонок доступно только в стандартном режиме (Mode.Grid).

Пример перетаскивания заголовка колонки в область группировки
void moveColumnToGroupArea(ColumnHeader columnHeader) {
   Geometry geometry = Geometry.of(client);
   BoundingClientRect col1BoundingClientRect = geometry.getBoundingClientRect(columnHeader);
   columnHeader.mouseDown();
   columnHeader.mouseMoveByOffset(5, 1);
   columnHeader.mouseMoveByOffset(0, -Double.valueOf(col1BoundingClientRect.getHeight()).intValue());
   columnHeader.mouseMoveByOffset(-5, -1);
   columnHeader.mouseUp();
}

Перестроение таблицы

В результате некоторых взаимодействий со списком происходит полное обновление dom-элемента таблицы, что приводит к устареванию ссылки на объект таблицы в коде теста. Примеры таких взаимодействий (список не исчерпывающий):

  • Изменение порядка колонок

  • Сортировка по колонке

  • Изменение видимости колонки

  • Клик по пункту конекстного меню “Восстановить настройки по умолчанию”

В этих случаях необходимо перезапрашивать ссылку на таблицу у объекта фрейма.