Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Использование компонента табличного просмотра/редактирования Grid




Создание многотабличных форм при помощи конструктора

Фактически, мастер создания многотабличных форм имеет только одно преимущество, а именно скорость разработки. Наряду с этим он обладает рядом крупных недостатков: необходимость русификации созданного интерфейса; большая сложность работы конечного пользователя, т.к. требуется знание логики и структур данных; сложность внесения изменений в программный код; количество таблиц, используемых формой, ограничено двумя и т.д.

Гораздо более эффективным представляется создание многотабличных форм при помощи конструктора. В этом случае разработчик не ограничен никакими условиями, кроме требований системы. Для запуска конструктора в окне запроса способа создания экранных форм (см. рис. 1) следует выбрать New Form, после чего, в рабочей области главного окна VFP появится окно конструктора форм и окно свойств. Рекомендуется в окружение данных формы изначально добавить все таблицы, которые будут использоваться в дальнейшем. (Добавление таблиц в окружение данных формы описано в предыдущей работе.) В случае если в самой базе данных определены связи между таблицами, они будет перенесены в окружение данных формы, но с небольшими оговорками, а именно:

1. Независимо от определения направления связи в базе данных, в окружении данных формы главной будет считаться таблица, добавленная первой. Изменить это в дальнейшем нельзя.

2. В окружении данных формы не может быть таблицы, являющейся дочерней более чем для одной другой таблицы. Связь будет установлена только для одной родительской таблицы, другая же будет утеряна. Установка связи насильственно проблему не решает, т.к. являющаяся по логике базы данных родительской, таблица будет дочерней, что непосредственно отразится на правильности отображаемых данных.

В контексте второй оговорки более предпочтительным выглядит способ программной связи данных, при котором не существует ограничений ни на логику связей, ни на количество связываемых таблиц. Для удаления ненужных связей в окружении данных формы достаточно выбрать линию связи мышкой, при этом сама линия связи выделится более темным цветом, и нажать клавишу Delete на клавиатуре.

Т.к. одной строке данных в родительской таблице могут соответствовать произвольное количество строк дочерней таблицы, возникает необходимость отображения множественного массива однотипных записей. Для этого существует стандартный компонент Grid, позволяющий отображать данные на форме в виде таблицы (рис. 9). Для добавления этого компонента на форму достаточно выбрать его на панели Form Controls и щелкнуть левой кнопкой мыши в произвольном месте созданной формы. После этого пустой компонент будет добавлен на форму и станет доступным для редактирования (рис.10). Его свойства и методы можно просмотреть и отредактировать в окне Properties.

Рис. 9 Окно Form Controls с выделенным компонентом Grid

Рис. 10 Форма с добавленным пустым компонентом Grid

 

Основные свойства компонента Grid Таблица 1.

Свойства Назначение
ColumnCount Определяет количество столбцов в Grid’е. По умолчанию установлено –1, что является признаком отсутствия столбцов вообще.
DeleteMark Определяет наличие столбца в левой части таблицы с признаком пометки на удаление.
GridLines Определяет начертание сетки таблицы внутри самого компонента.
Name Задает имя компонента, по которому будет осуществляться дальнейшее обращение к нему.
ReadOnly Определяет свойство разрешения записи
RecordSource Определяет имя источника данных.
RecordSourceType Определяет тип источника данных. Допускаются значения: 0 – Table таблица базы данных 1 – Alias открытая рабочая область 2 – Prompt источник запрашивается у пользователя в процессе работы 3 – Query файл запроса 4 – SQL Statement результат выполнения команды SELECT – SQL
RowHeight Определяет высоту строк. Задается для всех отображаемых строк.
ScrollBars Задает наличие полос прокрутки.
Visible Определяет видимость компонента на форме.

 

Обратите внимание, что при установке значения свойства ColumnCount больше 0, в окне Properties станут доступны свойства подобъектов (рис. 11). Из рисунка видно, что сам компонент Grid состоит из составных объектов Column, которые в свою очередь состоят из подобъектов Header и Text. Для редактирования свойств подобъекта Grid’а необходимо его выбрать в ниспадающем списке окна Properties.

Рис. 11 Иерархия объектов компонента Grid

 

У объектов типа Column наиболее значимым является свойство ControlSource, которое определяет источник данных для столбца, а точнее, название таблицы и поля, разделенные точкой, из которого будут браться данные для отображения, например Ordsaled.icdOrder. У столбцов так же существует свойство видимости Visible, используя которое можно скрывать от пользователя данные, которые он не должен видеть.

Каждый столбец имеет заголовок Header, который определяет надпись вверху столбца. За текст надписи отвечает свойство объекта Header Caption. Значение надписи заголовка столбца может быть установлено как в режиме разработки путем явного указания текста в свойствах объекта, так и в процессе работы с формой посредством явного присваивания свойства, например:

thisform.Grid1.Column1.Header1.Caption=”Новый текст заголовка”

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

Подобъект Text каждого столбца, является объектом ввода Text Box и обладает всеми его свойствами. (Свойства Text Box описаны в предыдущей работе.) Существует возможность расширения набора типов компонентов столбца, т.е. вместо текстового поля отображать в столбце Grid’а другие объекты. Для этого необходимо в режиме конструктора форм выбрать компонент Grid, правой кнопкой мыши вызвать контекстное меню и выбрать пункт Edit (рис 12). При этом система перейдет в режим редактирования составного объекта, о чем будет свидетельствовать визуальное изменение рамки выбранного объекта (вместо точек изменения размера объекта на экране появится цветная полосатая рамочка вокруг объекта). После этого на панели Form Controls нужно выбрать добавляемый компонент и левой кнопкой мыши щелкнуть на столбце Grid, в который будет добавлен выбранный компонент. После этого в свойстве столбца Grid CurrentControl появится возможность выбора текущего типа объекта столбца (рис. 13). Работа с новым типом производится в стандартном режиме.

При запуске формы новый тип объекта по умолчанию будет отображаться только в текущей строке. Для управления отображением служит свойство столбца Sparse, изначальное значение которого True. Установив значение этого свойства False, разработчик может принудительно заставить систему отображать новый тип объекта в каждой строке Grid. В случае, если высоты строки для отображения нового типа объекта недостаточно ее следует увеличить путем изменения значения свойства Grid RowHeight.

Рис. 12 Переход в режим редактирования составного объекта

 

Рис. 13 Изменение типа объекта столбца

 

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

Обратите внимание, что при изменении содержимого источника данных (добавление/удаление записей), а так же при изменениях в свойствах Grid, возникает необходимость обновления прорисовки формы командой thisform.Refresh(). Кроме того, следует помнить, что любое закрытие источника данных в процессе работы приведет к его потере для компонента Grid. В этом случае придется предусмотреть программное восстановление связи с источником данных. Лучше всего программный код прописать сразу после нового открытия источника. При этом программа должна содержать команды всех необходимых изменений свойств Grid и его подобъектов, например:

 

*Использование оператора WITH... ENDWITH для работы со свойствами некоторого объекта

*в основном используется для уменьшения объема прописываемого кода

*

*строки, начинающиеся с символа * являются необязательными коментариями;)

*

*Указаный блок WITH... ENDWITH эквивалентен последовательному использованию команд

* thisform.Grid1.RecordSourceType= 1

* thisform.Grid1.RecordSource = "goods"

* thisform.Grid1.Column1.Header1.Caption="Столбец1"

WITH thisform.Grid1

*Установка связи с источником данных

.RecordSourceType= 1

*в качестве источника указана рабочая область с именем goods

.RecordSource = "goods"

*изменение названия первого столбца

.Column1.Header1.Caption="Столбец1"

*далее могут располагаться другие команды по изменениям свойства Grid

ENDWITH

*Обновление формы

thisform.REFRESH()

 

Организация работы с несколькими таблицами на одной форме

В принципе работа с несколькими таблицами ничем не отличается от работы с одной таблицей. Только необходимо помнить, что все операции проводятся по умолчанию в текущей рабочей области. Соответственно, при работе с многотабличной формой необходимо перед выполнением некоторых действий следует сделать нужную рабочую область текущей командой SELECT <alias>, например:

 

*выбрать рабочую область ordsalem

SELECT ordsalem

*добавить пустую запись

APPEND BLANK

*выбрать рабочую область ordsaled

SELECT ordsaled

*перейти к следующей записи

SKIP

данный программный код добавит пустую запись в таблицу ORDSALEM, а в таблице ORDSALED передвинет указатель на следующую запись. При этом все дальнейшие операции будут проводиться с таблицей ORDSALED, пока не будет выбрана другая рабочая область!

Возможен вариант явного указания рабочей области, для которой будет выполнена команда, путем использования служебного слова IN в тексте самой команды: APPEND BLANK IN ORDSALEM. Этот вариант выгоден, когда необходимо выполнить очень небольшой блок команд, при этом текущая рабочая область останется не измененной. Указанная команда не изменяет текущую рабочую область, и дальнейшая работа будет производиться с рабочей областью, которая была текущей до выполнения команды.

В отличии от жестких решений, предлагаемых мастером построения, разработчик имеет гораздо большую свободу при организации интерфейса экранных форм. Одним из вариантов организации работы с несколькими таблицами является создание персонального набора элементов управления для каждой таблицы, т.е. при работе с двумя таблицами, на форме организуются два набора кнопок управления. При этом желательно каждый набор визуально выделять в отдельный функциональный блок и, рекомендуется, использовать разные поясняющие текстовые надписи на самих кнопках, например: «Добавить заказ», «Добавить товар в заказ». Соответственно в программном коде кнопок, следует явно указывать, для какой таблицы производится действие.

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

Рис. 14 Пример организация работы с несколькими таблицами

 




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 437; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.04 сек.