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;
Однако в этом случае индексное поле будет первым (левым), а остальные поля будут расположены произвольным образом.