Здавалка
Главная | Обратная связь

Управление отображением данных

В предыдущем примере всё работает прекрасно, только вот поле Key1 пользователю видеть абсолютно не нужно. Это поле – счётчик и его значение увеличивается автоматически. А раз пользователь не может влиять на поле и оно не несёт в себе полезной для него информации, то и видеть это поле он не должен.

Чтобы прятать от пользователя не нужные поля и показывать только то, что мы хотим и в том виде, в котором хотим, нам необходимо научиться управлять отображением данных. Но прежде чем приступить к этому, давай создадим в нашей базе ещё два поля «Дата» и «Мобильник». Загрузи нашу базу данных в Access, щёлкни по ней правой кнопкой и в появившемся меню выбери «Конструктор».

 

 

Рис 4.1 Редактирование таблицы

1. Добавь поле с именем «Дата», тип «Дата/время».

2. Добавь поле с именем «Мобильник», и тип «Логический». Если в строке находиться мобильный телефон, то в этом поле будем ставить true, иначе «false».

 

Закрой таблицу. Теперь переходим в Delphi и попробуем отобразить изменения в

уже созданном примере.

Для начала давай перенесём компоненты доступа к базе данных в отдельное специальное окно. Выдели компоненты ADOConnection1, DataSource1 и BookName. Теперь выбери из меню Edit пункт Cut, чтобы эти компоненты скопировались в буфер обмена и сразу удалились с формы.

Теперь выбери из меню File->New->Data Module (рисунок 4.2). Этим ты заставишь Delphi создать специальное окно Data Module, которое удобно подходит для хранения компонентов доступа к базам данных.

 

 

Рис 4.2 Создание модуля Data Module

 

Теперь выбери из меню Edit пункт Paste, чтобы вставить в это окно вырезанные нами компоненты. Расположи теперь эти компоненты в окне так, как тебе будет удобно. Я сделал это так, как показано на рисунке 4.3.

 

 

Рис. 4.3 Окно Data Module

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

Теперь открой менеджер проектів (в меню View надо выбрать Project Manager) и расположи это окно так, чтобы тебе было удобно в любой момент получить к нему доступ. Я всегда располагаю его в правом нижнем углу экрана.

Теперь, когда тебе надо перейти из главной формы в модуль данных DataModule или обратно, ты легко можешь сделать это с помощью менеджера проектов, дважды щёлкнув по нужной форме.

 

 

Рис. 4.4 Менеджер проектов

 

Если ты хоть раз уже открывал какую-то форму из менеджера проектов и не закрывал, то её можно найти на закладках в окне редактора кода:

 

 

Рис. 4.5 Закладки форм в редакторе кода

И ещё хочу напомнить, что переключаться между визуальной формой и её кодом

очень удобно простым нажатием клавиши F12.

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

Перейди в главную форму и ты сразу увидишь, что в нашей сетке DBGrid1 нет

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

Чтобы форма узнала о существовании компонентов, ей нужно указать в разделе usesнаш модуль DataModuleUnit. Это можно сделать вручную или выбрать из меню File пункт Use Unit (в этот момент должно быть выделено окно кода главной формы, потому что мы подключаем новый модуль именно к ней. В появившемся окне (рисунок 4.6) нужно выбрать имя нашего нового модуля DataModuleUnit (пока оно одно в списке) и нажать ОК.

Проверь теперь в редакторе кода, чтобы после ключевого слова implementation

появилось «uses DataModuleUnit;»:

Implementation

uses DataModuleUnit;

{$R *.dfm}

Рис. 4.6 Окно подключения нового модуля

 

Вот теперь можно выделять нашу сетку DBGrid1 и в свойстве DataSource указывать компонент DataSource, данные которого должны быть отображены в сетке (DataModule1.DataSource1).

Теперь переходим в модуль DataModule и попытаемся настроить отображение данных. Дважды щёлкни по компоненту BookTable и перед тобой появиться окно редактирования полей базы данных (рис. 4.7).

 

 

Рис. 4.7 Окно редактирования полей базы данных

 

Пока что оно пустое и сюда нужно добавить все поля базы данных. Для этого щёлкни в нём правой кнопкой мыши и в появившемся меню выбери пункт Add All Field (Добавить все поля). Окно автоматически заполниться именами полей (рис. 4.8).

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

Ты можешь теперь выделять отдельные поля и в объектном инспекторе редактировать его свойства. Свойства у полей могут быть разные, в зависимости от типа поля. Я сейчас не буду их расписывать, уж лучше мы постепенно познакомимся с ними на практике и увидим их действие.

 

 

Рис. 4.8 Заполненное окно редактирования полей базы данных

Первое, что мы должны сделать – убрать из видимости счётчик (поле Key1). Мы уже договорились, что пользователю оно не нужно и он не должен его видеть. Выдели это свойство и в объектном инспекторе установи в свойстве Visible значение false (это свойство есть у всех полей). Сразу же можешь перейти в главную форму или запустить программу, чтобы убедиться в том, что поле Key1 больше не отображается.

Теперь отредактируем длину отображения колонок. Для этого выдели свойство

«Фамилия». В базе данных мы выделили под это поле 50 символов (на всякий случай). В сетке ширина колонки будет отображаться по умолчанию на всю длину. Но чаще всего фамилии не превышают 15 символов, поэтому нет смысла отображать всю длину. На много удобней отображать только 15 символов, а если что-то не поместиться, то пользователь программы в любой момент сможет раздвинуть колонку и увидеть недостающие символы.

За ширину колонки отвечает свойство DisplayWidth (это свойство есть у всех полей). По умолчанию в нём стоит значение физической ширины поля, но мы укажем там 15.

Опять же, на саму базу данных это не влияет и поле всё ещё имеет размер 50, но ширина отображаемой колонки в сетке будет 15. Точно так же сократи ширину поля «Имя».

Ещё несколько интересных свойств:

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

MaxValueмаксимально допустимое значение. Если это числовое поле и оно должно изменяться в определённых рамках (например, от 0 до 100), то желательно указать эти ограничения здесь, чтобы сократить вероятность опечатки пользователем. Все люди склонны к ошибкам, так пускай программа автоматически сокращает вероятность таких ошибок.

MinValueминимально допустимое значение.

ReadOnly поле только для чтения. Если какое-то поле не должно изменяться, то установи у него в свойстве ReadOnly значение true. В этом случае ты обезопасишь программу от случайного изменения данного поля пользователем.

Requiredесли здесь true, то поле является обязательным и обязательно должно иметь какое-то значение. Если пользователь ничего не укажет, то программа сообщит об этом. Допустим, что какое-то поле у тебя участвует в расчётах. Если в этом поле не

окажется данных, то программа может зависнуть. Есть два пути – при расчёте проверять наличие в поле данных или требовать, чтобы пользователь обязательно что-то ввёл. Второй путь предпочтительней, если это поле действительно важное. Представь запись в телефонном справочнике без телефона. Спрашивается, зачем тогда нужна эта запись если не указан телефон. Так что поле для номера телефона можно делать обязательным.

 

Tag – просто числовое значение, которое можно использовать по своему усмотрению.

Теперь в нашем окне помещается практически вся необходимая информация и не надо лишний раз использовать полосы прокрутки (рис. 4.9).

 

Рис. 4.9 Улучшенное окно программы

 

Запусти программу и заполни поле «Дата» у всех записей любыми значениями. При заполнении будь внимателен и указывай реальные даты. Если ты введёшь недопустимое значение, то программа высветит ошибку.

При вводе данных учитывай разделитель чисел. В большинстве русскоязычных ОС Windows в качестве разделителя используется точка или знак косой черты «/». К тому же первым идёт число, потом месяц и потом год (в англоязычной версии первым может идти месяц). Пробелы не допустимы. Этот порядок и разделитель настраиваются в настройках ОС. Войди в «Панель управления» и запусти окно «Язык и стандарты» (рисунок 4.10). Здесь ты можешь изменить все настройки ввода даты, времени и чисел.

 

Рис. 4.10 Настройка формата ввода и отображения даты

Вернёмся к Delphi. Выдели поле «Дата». Первое, что мы должны сделать – уточнить, какую именно дату здесь надо вводить. Так как это телефонный справочник, то я собираюсь здесь указывать дату рождения владельца телефона. Поэтому, вполне разумно будет в заголовке сетке отображать не просто «Дата», а «Дата рождения». Тут можно поступить двумя способами – отредактировать имя поля в базе данных (не совсем разумно) или просто заставить Delphi отображать в заголовке поля нужный текст.

За текст отображаемый в заголовке отвечает свойство DisplayLabel (это свойство есть у всех полей). Давай в нём введём текст «Дата рождения». Можешь проверить, что теперь в заголовке отображается нужный текст.

Теперь отредактируем формат отображения даты. За это отвечает свойство DisplayFormat. Тут можно указывать текстовый формат, в котором нужно отображать дату. Как отображать? Вспомни функцию FormatDateTime и её первый параметр (см главу «Преобразование данных»). Вот именно это здесь и можно указывать. Лично я люблю использовать для отображения полный формат – «dddddd».

Ну и наконец нужно указать маску ввода для даты. Её нужно указывать в свойстве EditMask и так же, как мы это делали у компонента TMaskEdit. Для даты я всегда указываю маску ввода «99/99/9999».

Если ты теперь запустишь наш пример, то в поле «Дата рождения» все даты будут отображаться в полном формате (рис. 4.11). Если щёлкнуть дважды по этому полю в любой строке (войти в режим редактирования строки), то дата сразу перейдёт в режим редактирования (см рис.4.11 вторая строка).

 

Рис. 4.11 Улучшенный вид поля «Дата рождения»

Последнее, что нам надо отредактировать – поле «Мобильник». Пока что здесь отображаются значения trueили false. Но мы русские люди и для нас будет удобнее видеть родные Даили Нет. Выдели это поле и в объектном инспекторе найди свойство DisplayValues. Для булевых полей здесь нужно указать два значения в формате «True;False», т. е. сначала указываем положительное значение и после точки с запятой отрицательное (кавычки указывать не надо). Итак, я указал Да;Нет.

Теперь в поле «Мобильник» будут отображаться понятные слова, да и при редактировании теперь нужно вводить не trueили false, а родные Даили Нет.

 





©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.