我正在 Delphi 中构建一个表单,其中包含服务下拉列表和用于选择服务的附加组件网格。我获取的数据来自 API,并且我将服务的数据存储在 ADODataSet 中,如下所示:
ID (integer)
Name (string)
Description (string)
BasePrice (currency)
AddOns (array of AddOn, not currently stored in the ADODataSet)
我希望根据下拉列表中的选择使用附加组件数据填充网格(每个服务都有不同的附加组件列表)。如何存储附加信息,以便将其与服务信息相关联?我是否需要创建第二个 ADODataSet,或者是否有办法将其存储在与服务相同的 ADODataSet 中?
附加组件具有以下字段:
ID (integer)
Name (string)
Description (string)
UnitPrice (currency)
Quantity (integer)
我使用的是 Delphi 2005,并且有 Indy for Delphi。
编辑
在深入研究数据集的字段编辑器时,我发现可以创建“数据集”类型的字段。这能让我将两者联系在一起吗?如果是这样,有人可以解释一下这是如何完成的吗?
我尝试通过创建第二个数据集 (ADODataSetAddOns) 并将新数据集分配给第一个数据集 (ADODataSetServices.AddOns) 中的数据集字段来实现此目的,但收到错误消息“数据集没有匹配的 ADO 数据类型”,其中我假设指的是 AddOns 字段未找到数据集。
最佳答案
您可以使用 2 个数据集(主从)来显示服务和插件之间的关系,然后使用 TClientDataset
作为内存数据集,您可以使用 Service Id
、Addon Id
对作为索引来存储选择,该客户端数据集的结构可以在运行时创建,如下所示
ClientDataSet1.FieldDefs.Clear;
ClientDataSet1.FieldDefs.Add('IdService', ftInteger);
ClientDataSet1.FieldDefs.Add('IdAddon ', ftInteger);
//add morr fieldd here is you want
ClientDataSet1.IndexDefs.Add('Index1','IdService;IdAddon',[ixPrimary, ixUnique]);
ClientDataSet1.IndexName:='Index1';
ClientDataSet1.CreateDataSet;
最后,当您需要将用户选择的数据传递给服务时,您可以像任何 TDataset 一样迭代 ClientDataset。
关于Delphi - ADODataSet 子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209964/