Delphi 3 и создание приложений баз данных

       

TDBGrid и динамические свойства столбцов


В том случае когда столбцы таблицы (т е поля записи) определены с использованием редактора полей как компоненты типа TField столбцы показываются в сетке TDBGrid в том состоянии которое определяется их текущими свойствами Если то или иное свойство столбца можно менять в процессе выполнения приложения эти изменения немедленно отобразятся в TDBGrid Например в ходе выполнения можно менять ширину столбца (свойство компонента TField Display Width) его видимость (Visible) возможность редактирования значения столбца (ReadOnlv) порядковый номер (Index) заголовок столбца (Display Label)

Пример

Воспользуемся формой из предыдущего примера и добавим в нее компонент CheckBoxl Установим свойство Visible компонента Table lUchStepen (поте Ученая степень"), равным свойству CheckBoxl Checked Тогда отметка CheckBoxl приведет к визуализации столбца 'Ученая степень в таблице TDBGrid (рис 10 4 а), а снятие отметки- к его исчезновению' (рис 1046)

procedure TFormX.CheckBox1Click(Sender: TObject);

begin

Table1UchStepen.Visible := CheckBox1.Checked;

end;

Здесь мы имеем дело с настраиваемым компонентом TDBGnd Многие свойства TDBGnd могут быть переустановлены во время выполнения приложения Это может придать самому приложению значительную гибкостьассический пример - возможность выбора пользователем порядка сортировки записей НД и порядка их расположения в TDBGnd

Пример.

Пусть таблица teachers db ассоциирована с НД Table 1, записи которого показываются в компоненте DBGndl Пусть у таблицы teachers db имеются индексы по полям 'TabNum' (уникальный, установлен в таблице по умолчанию) 'Doljnosf, 'ПО', 'UchStepen,FIO' Разместив в форме компонент TRadioGroup, сделаем выбранной по умолчанию радиокнопку с индексом 0 (соответствующую индексу по полю 'TabNum') и опишем обработчик события выбора одной из радиокнопок

procedure TForm!.RadioGrouplClick(Sender: TObject);

begin

WITH Table1 do begin

CASE RadioGroupl.ItemIndex OF

0 : begin



IndexFieldNames := 'TabNum';

Table1TabNum.Index := 0;

Table1Doljnost.Index := 2;

Table1FIO.Index := 1;

Table1UchStepen.Index := 3;

end;

1 : begin

IndexFieldNames := 'Doljnosf;

Table1Doljnost.Index := 0;

TabielFIO.Index := 1;

Table1UchStepen.Index := 2,Table1TabNum Index := 3;

end;

2 : begin

IndexFieldNames := 'FIO';

Table1FIO.Index := 0;

Table1UchStepen.Index := 1;

Table1Doljnost.Index := 2;

Table1TabNum.Index := 3;

end;

3 : begin

IndexFieldNames := 'UchStepen';

Table1UchStepen.Index := 0;

Table1FIO.Index := 1;

Table1Doljnost.Index := 2;

Table1TabNum.Index := 3;

end;

END; {case}

END; {with}

end;

Тогда при выборе любой из радиокнопок произойдет переключение текущего индекса и порядка следования столбцов в TDBGnd (рис 105, 106)

Заметим, что можно было бы написать обработчик и так:

procedure TForm!.RadioGrouplClick(Sender: TObject) ;

begin

WITH Table1 do begin

CASE RadioGroupl.Itemlndex OF

0 : begin

IndexFieldNames := 'TabNum';

Table1TabNum.Index := 0;

end;

1 : begin

IndexFieldNames := 'Doljnost;

Table1Doljnost.Index := 0;

end;

2 : begin

IndexFieldNames := 'FIO';

Table1FIO.Index := 0;

end;

3 : begin

IndexFieldNames := 'UchStepen';

Table1UchStepen.Index := 0;

end;

END; {case}

END; {with}

end;

Однако в этом случае индексное поле будет первым (левым), а остальные поля будут расположены произвольным образом.



Содержание раздела