Работа с несколькими записями
DBGrid не отображает графические поля. Тем не менее вы можете решить эту задачу программным путем. Один из методов заключается в следующем: на форме располагаются несколько компонентов TTable со ссылкой на одну и ту же таблицу, и несколько компонентов DBImage, связанные с компонентами TTable. Основная идея заключается в синхронизации позиции курсора, управляемым пользователем. Для этого мы применим компонент DBNavigator, который заботится о перемещении в первую таблицу и запишем код для обработчика события навигатора OnClick для позиционирования указателя записи для других объектов. Для воссоздания примера выполните следующее:
- Расположите на форме три компонента TTable с именами Table1, Table2, и Table3 соответственно
- Расположите на форме три компонента DataSources и свяжите их с Table1..Table3
- Расположите на форме три компонента DBImage и свяжите их с DataSource1..DataSource3, все они будут иметь одно и тоже значение свойства DataField.
- Расположите на форме компонент DBNavigator и свяжите его с DataSource1.
- Создайте процедуру как показано ниже:
|
|
procedure InitPosition ; begin { Начальная позиция }Form1.Table2.Active := TRUE ;Form1.Table3.Active := TRUE ;if Form1.Table1.RecordCount > 1 then Form1.Table2.MoveBy(1) ;if Form1.Table2.RecordCount > 2 then Form1.Table3.MoveBy(2) ;end ; |
В обработчике события Form.OnShow вызовите InitPosition. В обработчике события OnClick компонента DBNavigator создайте следующий код:
|
|
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); begin case button ofnbNext :beginif not Table2.Eof then Table2.Next ;if Table2.Eof then Table2.Active := FALSE ;if not Table3.Eof then Table3.Next ;if Table3.Eof then Table3.Active := FALSE ;end ;nbPrior :beginif not Table2.Bof then Table2.Prior ;if not Table3.Bof then Table3.Prior ;end ;nbFirst :InitPosition ;nbLast :beginTable2.Active := FALSE;Table3.Active := FALSE;end ;end ;end; |
Данный метод отображает на форме три графических поля. Пожалуйста имейте в виду, что вышеуказанный код НЕ завершен и требует доработки. Кроме того, я уверен, что существуют другие, не худшие решения.
OAmiry/Borland [000371]
Содержание раздела