Работа с несколькими записями
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 ; |
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); begin case button of nbNext : begin if 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 : begin if not Table2.Bof then Table2.Prior ; if not Table3.Bof then Table3.Prior ; end ; nbFirst : InitPosition ; nbLast : begin Table2.Active := FALSE; Table3.Active := FALSE; end ; end ; end; |
Данный метод отображает на форме три графических поля. Пожалуйста имейте в виду, что вышеуказанный код НЕ завершен и требует доработки. Кроме того, я уверен, что существуют другие, не худшие решения.
OAmiry/Borland [000371]