Академический Документы
Профессиональный Документы
Культура Документы
Теоретическая часть
Профессиональные программы отличаются большим набором
дополнительных возможностей для пользователя. В этой работе рассмотрим
дополнительные возможности сетки DBGrid.
Строки сетки DBGrid соответствуют записям подключенного набора
данных, а столбцы - полям. Свойство DataSource содержит ссылку на
выбранный набор данных. Изменяя эту ссылку во время работы программы,
можно изменять выводимые в сетке данные, отображая то одну, то другую
таблицу (или запрос) в одной сетке DBGrid.
Столбцы DBGrid
Столбцы содержат значения полей подключенного к сетке набора
данных. Этими значениями можно манипулировать, показывая или скрывая
поля НД, меняя их местами или добавляя новые столбцы. Нам уже
приходилось это делать в редакторе полей набора данных, однако, это не
всегда оправдано - один набор данных может использоваться в различных
местах приложения, в различных формах и на различных сетках.
Изменение свойств полей набора данных в этом случае коснется и всех
сеток DBGrid, которые подключены к нему, а это требуется далеко не всегда.
Более разумным вариантом будет добавление всех полей в редактор
полей набора данных, а изменение их свойств можно сделать в каждой
сетке по-своему.
Если не пользоваться редактором столбцов самой сетки, DBGrid будет
выводить значения по умолчанию - будут выведены все поля набора данных,
а заголовки столбцов будут соответствовать именам полей. Но стоит только
добавить в редактор столбцов хоть один столбец, и сетка DBGrid будет
отображать только его. Таким образом, мы можем показывать только те
столбцы, которые действительно необходимы.
Выполнение работы:
DBGrid1.Columns[0] = DBGrid1.Columns.Items[0]
{Меняем шрифт}
procedure TfMain.Button1Click(Sender: TObject);
begin
//считаем в диалог шрифта установленный шрифт
FontDialog1.Font :=
DBGrid1.Columns.Items[DBGrid1.SelectedIndex].Font;
//установим выбранный шрифт:
if FontDialog1.Execute then
DBGrid1.Columns.Items[DBGrid1.SelectedIndex].Font :=
FontDialog1.Font;
end;
Пустые столбцы
Если добавить в редактор столбцов сетки DBGrid новый столбец, но в
свойстве FieldName не выбирать поле БД, а оставить его пустым, мы получим
пустой столбец. Пустые столбцы в сетке могут быть использованы в
следующих случаях. Во-первых, в них можно выводить обработанные
данные из других столбцов. К примеру, пользователю неудобно
просматривать три столбца "Фамилия", "Имя" и "Отчество". Ему было бы
удобней просмотреть один сборный столбец в формате "Фамилия И.О.". Во-
вторых, пустое поле может выводить информацию по требованию.
Рассмотрим эти случаи.
Создайте новый столбец, но не назначайте ему поле из НД. Выделите
этот столбец, и в его свойстве Title.Caption впишите "Фамилия И.О.", а в
свойстве Width укажите ширину в 150 пикселей. Эти сборные данные не
будут видны в момент проектирования таблицы, они выйдут только во время
работы программы.
Столбцы "Фамилия", "Имя" и "Отчество" нам уже не нужны, скройте
их, установив их свойство Visible в False. А новый столбец перетащите
мышью наверх, его индекс будет равен 0.
Нам придется написать код, который нужно вписать в событие
OnDrawColumnCell сетки. Это событие наступает при прорисовке каждой
ячейки столбца. Также имеется событие OnDrawDataCell, которое выполняет
схожие функции, но оно оставлено для поддержки старых версий, и
использовать его не желательно. Итак, выделяем сетку, генерируем
событие OnDrawColumnCell и вписываем код:
{Прорисовка таблицы}
procedure TfMain.DBGrid1DrawColumnCell(Sender: TObject; const Rect:
TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
s: String;
begin
//если это пустой столбец
if Column.Index = 0 then begin
if ADOTable1['Фамилия'] <> Null then
s:= ADOTable1['Фамилия'] + ' ';
if ADOTable1['Имя'] <> Null then
s:= s + Copy(ADOTable1['Имя'], 1, 1) + '.';
if ADOTable1['Отчество'] <> Null then
s:= s + Copy(ADOTable1['Отчество'], 1, 1)+ '.';
DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top, s);
end; //if
end;
ShowMessage(ADOTable1['Образование']);
Теперь, когда пользователь нажмет на эту кнопку, ему будет выведено
сообщение с текстом об образовании текущего сотрудника.
Список выбора в столбце
Для организации списков выбора служит компонент ComboBox.
Однако сетка DBGrid позволяет устроить такой же список в одном из своих
столбцов без использования каких-либо других компонентов. В нашем
примере есть поле "Пол". Это текстовое поле из трех символов. Во время
конструирования базы данных ok.mdb с помощью программы MS Access мы
указывали, что это поле может хранить значения либо "муж", либо "жен". То
же самое можно было сделать с помощью сетки. Откройте редактор столбцов
сетки и выделите столбец "Пол". Обратите внимание на свойство PickList в
Инспекторе объектов. Это свойство имеет тип TStrings, то есть представляет
собой набор строк, так же как и свойство Itemsу компонента ComboBox.
Щелкните дважды по PickList, чтобы открыть редактор, и впишите туда
муж
жен
именно так, каждое значение на своей строке. Сохраните проект,
скомпилируйте его и попробуйте редактировать этот столбец. При попытке
редактирования в ячейке покажется похожий на ComboBox список, в котором
можно будет выбрать одно из указанных значений: