Управление TDBGrid во время выполнения
Объект DBGrid может быть полностью реконфигурирован во время выполнения программы. Вы можете прятать и показывать колонки, изменять порядок показа колонок и их ширину.
Вы можете использовать свойство Options объекта DBGrid, чтобы изменить ее представление. Свойство Options может принимать следующие возможные значения:
dgEditing | Установлен по-умолчанию в true, позволяет пользователю редактировать grid. Вы можете также установить свойство ReadOnly grid в True или False. |
dgAlwaysShowEditor | Всегда показывать редактор. |
dgTitles | Показывать названия колонок. |
dgIndicator | Показывать небольшие иконки слева. |
dgColumnResize | Может ли пользователь менять размер колонки. |
dgColLines | Показывать линии между колонками. |
dgRowLines | Показывать линии между строками. |
dgTabs | Может ли пользователь использовать tab и shift-tab для переключения между колонками. |
dgRowSelect | Выделять всю запись целиком. |
dgAlwaysShowSelection | Всегда показывать выбранные записи. |
dgConfirmDelete | Подтверждать удаление. |
dgCancelOnExit | Отмена изменений при выходе из DBGrid. |
dgMultiSelect | Одновременно может быть выделена больше чем одна запись. |
Как объявлено в этой структуре:
DBGridOption = (dgEditing, dgAlwaysShowEditor, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect,dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit, dgMultiSelect);
Например Вы можете установить опции в Runtime написав такой код:
DBGrid1.Options := [dgTitles, dgIndicator];
Если Вы хотите включать и выключать опции, это можно сделать с помощью логических операций. Например, следующий код будет добавлять dgTitles к текущему набору параметров:
DBGrid1.Options := DBGrid1.Options + [dgTitles];
Пусть есть переменная ShowTitles типа Boolean, тогда следующий код позволяют включать и выключать параметр одной кнопкой:
procedure TForm1.Button3Click(Sender: TObject);
begin
if ShowTitles then
DBGrid1.Options := DBGrid1.Options + [dgTitles]
else
DBGrid1.Options := DBGrid1.Options - [dgTitles];
ShowTitles := not ShowTitles;
end;
Если Вы хотите скрыть поле в run-time, то можете установить свойство visible в false:
Query1.FieldByName(‘CustNo’).Visible := False;
Query1CustNo.Visible := False;
Обе строки кода выполняют идентичную задачу. Чтобы показать поле снова, установите видимый в true:
Query1.FieldByName(‘CustNo’).Visible := True;
Query1CustNo.Visible := True;
Если Вы хотите изменить положение колонки в Runtime, можете просто изменить индекс, (первое поле в записи имеет индекс нуль):
Query1.FieldByName(‘CustNo’).Index := 1;
Query1CustNo.Index := 2;
По-умолчанию, поле CustNo в таблице Customer является первым. Код в первой строке перемещает это поле во вторую позицию, а следующая строка перемещает его в третью позицию. Помните, что нумерация полей начинается с нуля, так присвоение свойству Index 1 делает поле вторым в записи. Первое поле имеет Index 0.
Когда Вы изменяете индекс поля, индексы других полей в записи изменяются автоматически.
Если Вы хотите изменить ширину колонки в Runtime, только измените свойство DisplayWidth соответствующего TField.
Query1.FieldByName(‘CustNo’).DisplayWidth := 12;
Query1CustNo.DisplayWidth := 12;
Величина 12 относится к числу символов, которые могут быть показаны в видимом элементе.
Программа DBGR_RT показывает как работать с DBGrid в Runtime. Программа достаточно проста, кроме двух небольших частей, которые описаны ниже. Первая часть показывает, как создать check box в Runtime, а вторая показывает, как изменить порядок пунктов в listbox в Runtime.
При создании формы (событие OnCreate) ListBox заполняется именами полей, далее создается массив объектов CheckBox, соответствующий полям в таблице. Сперва все CheckBox’ы выбраны и все поля в таблице видимы. Программа узнает через TTable1 имена полей и присваивает их свойству Caption соответствующего CheckBox. Кроме того, обработчику события OnClick всех CheckBox’ов присваивается процедура ChBClick, которая и включает/выключает поля в DBGrid.
procedure TForm1.FormCreate(Sender: TObject);
var
i : Word;
R : Array[0..49] of TCheckBox;
begin
{Fill ListBox}
ListBox1.Clear;
for i:=0 to Table1.FieldCount-1 do
ListBox1.Items.Add(Table1.Fields[i].FieldName);
{Make CheckBoxes}
for i:=0 to Table1.FieldCount-1 do begin
R[I] := TCheckBox.Create(Self);
R[I].Parent := ScrollBox1;
R[I].Caption := Table1.Fields[i].FieldName;
R[I].Left := 10;
R[I].Top := I * CheckBox1.Height + 5;
R[I].Width := 200;
R[I].Checked := True;
R[I].OnClick := ChBClick;
end;
end;
Большая часть кода в этом примере выполняет относительно простые задачи, типа назначения имен и положений check boxes. Вот две ключевых строки:
R[I] := TCheckBox.Create(Self);
R[I].Parent := ScrollBox1;
Первая строки создает CheckBox с заданным Owner (Владельцем). Вторая строки назначает Parent (Родителя) для CheckBox. Чтобы понять различия между Родителем и Владельцем, посмотрите соответствующие свойства в online-help.
Программа содержит ListBox, который показывает текущий порядок полей в DataSet. Для изменения порядка полей в DataSet (а, следовательно, в DBGrid) используются две кнопки. При нажатии на одну из кнопок, выбранное в ListBox’е поле перемещается на одну позицию вверх или вниз. Синхронно с этим меняется и порядок полей в DBGrid. Код, показанный ниже, изменяет Index поля для Table1, изменяя, таким образом, позицию поля в DBGrid. Эти изменения касаются только визуального представления DataSet. Физически данные на диске не изменяются.
procedure TForm1.downButtonClick(Sender: TObject);
var
i : Integer;
begin
with ListBox1 do
if (ItemIndex<Items.Count-1)and(ItemIndex<>-1) then begin
i := ItemIndex;
{move ListBox item}
Items.Move(i, i+1);
ItemIndex := i+1;
{move Field}
Table1.Fields[i].Index:=i+1;
end;
end;
Последняя строка в примере как раз та, которая фактически изменяет индекс колонки, которую пользователь хочет переместить. Две строки кода непосредственно перед ней перемещают текущую строку в ListBox на новую позицию.
Внешний вид программы DBGR_RT показан на рис.4
Рис.4: Программа DBGR_RT
Урок 8: Управление соединением с базой данных (класс TDataBase, объект Session)
Содержание урока 8:
Обзор.......................................................................................................................................................................... 2
Класс TDataBase...................................................................................................................................................... 2
Объект Session......................................................................................................................................................... 7
Указание сетевого протокола при соединении с БД.................................................................................... 7