КАТЕГОРИИ: Архитектура-(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 больше 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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |