(изменено: SafiullinMF, 26 ноября 2012г. 09:50:09)

Тема: Работа с табличным атрибутом в TDMS4

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

Методы и свойства
Из того, что доступно программно добавились:
Метод RemoveAll, принадлежащий табличному атрибуту (TDMSTableAttribute), который удаляет все строки
Свойство Empty отдельной строки (TDMSTableAttributeRow), указывает на то, что все ячейки строки пустые. Иначе говоря, с помощью этого свойства можно проверить, что строка табличного атрибута пустая

Кроме этого у контрола появились свойства, которые можно настраивать только в дизайнере форм.

Для всего контрола можно настраивать свойства:
«Запретить вставку/удаление»
«Запретить дублирование»
«Запретить сортировку»
Все эти свойства влияют на работу со строками через интерфейс пользователя. Попросту говоря, ограничивают возможности пользователя по ручному редактированию табличного атрибута.

Часть действий пользователя можно запретить, обрабатывая события контрола, отменяя действие удаления строки и удаляя новые/сдублированные строки сразу после их появления. Либо можно обрабатывать события формы, связанные с табличными атрибутами (см. ниже)

Для каждой колонки табличного атрибута можно настраивать свойства:
«Видимый»
«Редактируемый»
«Ширина» - устанавливает начальную ширину колонки при открытии формы

При этом можно добраться до свойств «Редактируемый» и «Ширина» если обращаться к свойству ActiveX контрола.

Set grid = ThisForm.Controls("ATTR_TABLE").ActiveX
grid.ColumnEditable(col_number) = True/False
grid.ColumnWidth(col_number) = col_width

Также появилась возможность задавать параметры Ширины, Высоты и координаты левого верхнего угла контрола. Эти свойства не специфичны для табличного атрибута, их можно задавать для любого контрола. Программно ими можно управлять через свойства TDMSControl: Width, Height, Left и Top.

Кроме этого в дизайнер форм вынесены свойства табличного атрибута, которыми в третьей версии TDMS можно было управлять только программно (не через дизайнер):
«Видимый»
«Разрешен»
«Только для чтения»
«Запретить редактирование после создания»

События
Новые события позволяют более гибко реагировать на действия пользователя с табличным атрибутом.

  1. SelChanged. Смена выбранных ячеек. К сожалению, в параметры не передаются массивы вновь выбранных ячеек и ячеек, с которых выделение снято

  2. CellChecked. Проставление/снятие галочки в ячейке типа данных «Флаг». В параметры передаются номера сроки и колонки и новое значение. Есть возможность отмены действия.

  3. CellAfterEdit. Редактирование значения ячейки. В параметры передаются номера сроки и колонки и новое значение. Есть возможность отмены действия.

  4. RowInserted. Вставка новой строки. В параметры передается номер новой строки.

  5. RowDuplicated. Дублирование строки. В параметры передаются номера новой строки и номер оригинала.

  6. RowBeforeRemove. Удаление строки. В параметры передается номер строки. Есть возможность отмены действия.

Последовательность обработки событий
В TDMS4 появились новые события формы, связанные с табличными атрибутами. Теперь доступны для обработки следующие события:
TableAttributeChange (обрабатывается при изменении значения ячейки, но не при добавлении/удалении строк)
TableAttributeBeforeRowAdd
TableAttributeRowAdded
TableAttributeBeforeRowRemove
TableAttributeRowRemoved
TableAttributeRowOrderChanged

При изменении значения в ячейке таблицы сначала обрабатывается событие контрола CellAfterEdit либо CellChecked (возникает одно из них в зависимости от типа данных), а затем событие формы TableAttributeChange. Все три события отменяемы и если отменить событие контрола, то событие формы не происходит.

При вставке новой строки или дублировании наоборот сначала обрабатываются события формы TableAttributeBeforeRowAdd, затем TableAttributeRowAdded и после событие контрола RowInserted либо RowDuplicated. Первое из событий можно отменить и тогда остальные не произойдут.

TableAttributeRowOrderChanged не связано с другими событиями и не отменяется.

Работа с табличным атрибутом в TDMS4

Итог
Поведение табличного атрибута стало значительно более гибким по сравнению с третьей версией TDMS. Кроме того, можно работать с контролом как с ActiveX компонентом TDMSGridCtrl при помощи свойства ActiveX, хотя и при этом не получается добраться до всех свойств. Статья по работе с TDMSGridCtrl - Работа с ActiveX компонентами на формах. Элемент управления TDMSGridCtrl.