2012-04-18 47 views
2

我在Delphi中构建了一个窗体,它有一个服务下拉列表和一个选择服务的插件网格。我得到的数据来自一个API,我存储在ADODataSet的服务的数据如下:德尔福 - 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) 

我使用德尔福2005年和印有德尔福。

编辑

在周围的字段编辑挖掘的数据集,我发现我可以创建类型“数据集”的一个领域。这会让我把两者结合在一起吗?如果有的话,有人可以解释这是如何完成的?

我试图通过创建第二个数据集(ADODataSetAddOns)并将新数据集分配给第一个数据集(ADODataSetServices.AddOns)中的数据集字段,但得到错误消息'没有匹配数据集的ADO数据类型',我假设它指的是AddOns字段没有找到数据集。

回答

2

您可以使用2个数据集(主 - 详细信息),显示服务和附加组件,然后之间的关系用TClientDataset内存数据集可以存储使用Service IdAddon 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; 

,最后当你需要经过用户的服务选择的数据可以在ClientDataSet的迭代就像任何TDataSet的。

+0

感谢您的输入,我能够使用ClientDataSets为服务和附加组件解决此问题,然后将它们作为主/细节。 – BrianKE 2012-04-23 12:46:48