Grid содержит колонки, которые, в свою очередь, могут содержать заголовки и любые другие элементы управление. По умолчанию, элемент управления содержит в колонке - текстовый бокс, так что по умолчанию, функциональное назначение grid приближено к окну Browse. Тем не менее, архитектура, лежащая в основе grid, позволяет расширить его возможности по сравнению с возможностями окна Browse.

В следующем примере создается форма, которая содержит объект Grid с двумя колонками. Вторая колонка содержит checkbox для отображения значения логического поля таблицы.

Элемент управления Grid с checkbox'ом в одной колонке

FoxProGridExample screenshot
Определение Класса Grid с CheckBox'ом Колонке Grid
Код Комментарии

DEFINE CLASS grdProducts AS Grid

Left = 24

Top = 10

Width = 295

Height = 210

Visible = .T.

RowHeight = 28

ColumnCount = 2

Начало определения класса и установка свойств, которые определяют вид grid. Установкой свойства ColumnCount в 2, Вы добавляете две колонки к grid. Каждая колонка содержит заголовок с именем Header1. Кроме того, каждая колонка имеет независимую группу свойств, которые определяют ее вид и поведение.

Column1.ControlSource ="prod_name"

Column2.ControlSource ="discontinu"

Когда Вы установите свойство ControlSource колонки, то в колонке будет отображаться значения одного поля для всех записей таблицы. Discontinu - это логическое поле.

Column2.Sparse = .F.

Column2 будет содержать checkbox. Установите для колонки значение свойства Sparse в .F., чтобы checkbox был виден во всех строках, а не только в выбранной ячейке.

Procedure Init

THIS.Column1.Width = 175

THIS.Column2.Width = 68

THIS.Column1.Header1.Caption = ;

"Product Name"

THIS.Column2.Header1.Caption = ;

"Discontinued"

THIS.Column2.AddObject("chk1", ;

"checkbox")

THIS.Column2.CurrentControl = ;

"chk1"

THIS.Column2.chk1.Visible = .T.

THIS.Column2.chk1.Caption = ""

ENDPROC

Установите ширину колонки и название ее заголовка. Метод AddObject позволяет добавить объект в контейнер — в нашем случае это checkbox названный chk1. Присвойте свойству CurrentControl колонки имя checkbox'а для того, чтобы checkbox был виден. Убедитесь, что checkbox виден. Присвойте свойству Сaption checkbox'а пустое значение, чтобы он не был заполнен.

ENDDEFINE

Конец определения класса.

Следующий класс определяет форму, содержащую grid. Оба определения классов могу быть размещены в одном программном файле.

Определение Класса Form, которая Содержит Класс Grid
Код Комментарии

DEFINE CLASS GridForm AS FORM

Width = 330

Height = 250

Caption = "Grid Example"

ADD OBJECT grid1 AS grdProducts

Создает класс form и добавляет в него объект, основанный на классе grid.

PROCEDURE Destroy

CLEAR EVENTS

ENDPROC

ENDDEFINE

Программа, которая создает объект, основанный на этом классе, будет использовать команду READ EVENTS. Включение команды CLEAR EVENTS в Событие Destroy формы, позволит программе завершиться когда пользователь закроет эту форму. Конец определения класса.

Следующая программа открывает таблицу с полями, которые будут отображаться в колонках grid, создает объект, основанный на классе GridForm и запускает команду READ EVENTS:

  CopyCode imageКопировать код
CLOSE DATABASE
OPEN DATABASE (HOME(2) + "data\testdata.dbc")
USE products
frmTest= CREATEOBJECT("GridForm")
frmTest.Show
READ EVENTS

Эта программы может быть включена в начало того же файла, в котором определяются классы. Также, Вы можете использовать команду SET PROCEDURE TO, чтобы указать программу с определениями класса и включать этот код в отдельную программу.

См. также