2

我正在 Delphi 中构建一个表单,它有一个服务下拉列表和一个用于选择服务的附加组件网格。我得到的数据来自 API,我将服务的数据存储在 ADODataSet 中,如下所示:

ID (integer)
Name (string)
Description (string)
BasePrice (currency)
AddOns (array of AddOn, not currently stored in the ADODataSet)

我想让网格根据下拉列表中的选择填充插件数据(每个服务都有不同的插件列表)。如何存储 AddOn 信息以便它可以与服务信息相关联?我需要创建第二个 ADODataSet 还是有办法将其存储在与服务相同的 ADODataSet 中?

附加组件具有以下字段:

ID (integer)
Name (string)
Description (string)
UnitPrice (currency)
Quantity (integer)

我正在使用 Delphi 2005 并且有 Indy for Delphi。

编辑

在挖掘数据集的字段编辑器时,我发现我可以创建一个“数据集”类型的字段。这能让我把两者联系在一起吗?如果是这样,有人可以解释这是如何完成的吗?

我尝试通过创建第二个数据集 (ADODataSetAddOns) 并将新数据集分配给第一个数据集 (ADODataSetServices.AddOns) 中的数据集字段来做到这一点,但收到错误消息“数据集没有匹配的 ADO 数据类型”,我假设是参考 AddOns 字段未找到数据集。

4

1 回答 1

2

您可以使用 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。

于 2012-04-18T18:38:47.330 回答