如果您查看 Delphi 示例文件夹,您应该在 LiveBindings 文件夹下找到一个名为 BindGridLinkVCLProject 的示例(也许您已经在使用它)。
这显示了如何使用实时绑定StringGrid
从 a填充 aTDataSet
以及如何使用它来加载存储在数据库中的图像,基于StringGrid
.
它使用ClientDataSet
加载了标准(Borland)Biolife 数据库(又名 FishFacts)的数据。我已经检查过了,您可以用ClientDataSet
FireDAC 替换 (我使用了TFDMemTable
,因为样本数据也包含格式的 Biolife DB)。正如 Ken White 在评论中所说,您使用 Firebird 数据库应该没有任何区别(当然,您使用的 FireDAC 数据集类型除外)。
我还检查了您是否可以使用第二个 FireDAC 数据集进行查找以检索图像并将其加载到 aTImage
中。下面展示了如何。
在 BindGridLinkVCLProject 演示项目中,数据的 Graphic 列包含鱼的图片,并TImage
通过 Livebinding 显示。
很容易调整这个演示项目以从不同的位置检索图像TDataSet
(尽管在我下面描述的内容中,我们只是使用 Biolife 数据集的第二个副本)并使用 FireDAC 数据集而不是 ClientDataSets。(显然,这是一个人为的例子,因为 Biolife 数据中已经包含图像数据,但下面的内容是为了表明,即使使用实时绑定,如果需要,也可以很容易地从另一个数据集中检索图像。)
尝试以下操作:
制作项目及其 GridLinkFormUit1.Pas 文件的副本。
替换ClientDataSet1
为FDMemTable
.
点DataSource1
和BindSourceDB1
处FDMemTable1
。
从 Samples Data 文件夹中的 Biolife.Fds 文件加载FDMemTable1
(在 IDE 中右键单击它)。
此时,StringGridWithBindColumns
应显示 Biolife 数据,ImageWithHandler
TImage 应显示当前鱼的图片。现在,
双击BindingList1
并在弹出窗口中删除ImageWithHandler
. 我们将把它添加到下面的单独的 BindingList 中。
向表单添加第二个 FDMemTable 并使用与FDMemTable1
.
在表单中添加第二个DataSource
和BindingList
。指向。DataSource2
_
FDMemTable2
然后,双击,并使用编辑器在字段 of和TImageBindingList2
之间添加一个新的绑定(请参阅下面的 DFM 了解如何连接它。绑定编辑器应该自动创建
,您需要将其和属性设置为and 。Graphic
FDMemTable2
ImageWithHandler
BindSourceDB2
DataSet
DataSource
FDMemTable2
DataSource2
然后,将以下代码添加到表单的单元中,编译并运行:
TGridLinkForm1 = class(TForm)
[...]
public
{ Public declarations }
DataFileName : String;
end;
procedure TGridLinkForm1.FormCreate(Sender: TObject);
begin
DataFileName := 'D:\xe8\samples\Data\Biolife.Fds';
if not FDMemTable2.Active then
FDMemTable2.LoadFromFile(DataFileName);
if not FDMemTable1.Active then
FDMemTable1.LoadFromFile(DataFileName);
end;
procedure TGridLinkForm1.FDMemTable1AfterScroll(DataSet: TDataSet);
var
SpeciesNo : Double;
begin
SpeciesNo := FDMemTable1.FieldByName('Species No').AsFloat;
if not FDMemTable2.Locate('Species No', SpeciesNo, []) then
raise Exception.CreateFmt('SpeciesNo %n not found in %s', [SpeciesNo, FDMemTable2.Name]);
end;
DFM 提取物:
object FDMemTable2: TFDMemTable
FetchOptions.AssignedValues = [evMode]
FetchOptions.Mode = fmAll
ResourceOptions.AssignedValues = [rvPersistent, rvSilentMode]
ResourceOptions.Persistent = True
ResourceOptions.SilentMode = True
UpdateOptions.AssignedValues = [uvCheckRequired]
UpdateOptions.CheckRequired = False
Left = 24
Top = 392
end
object DataSource2: TDataSource
DataSet = FDMemTable2
Left = 88
Top = 392
end
object BindSourceDB2: TBindSourceDB
DataSource = DataSource2
ScopeMappings = <>
Left = 236
Top = 392
end
object BindingsList2: TBindingsList
Methods = <>
OutputConverters = <>
Left = 152
Top = 392
object LinkControlToField1: TLinkControlToField
Category = 'Quick Bindings'
DataSource = BindSourceDB2
FieldName = 'Graphic'
Control = ImageWithHandler
Track = False
end
end