2012-04-18 48 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