Delphi - ADODataSet 子集

标签 delphi datagrid drop-down-menu tadodataset

我正在 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 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;

最后,当您需要将用户选择的数据传递给服务时,您可以像任何 TDataset 一样迭代 ClientDataset。

关于Delphi - ADODataSet 子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209964/

相关文章:

c# - 如何在下拉列表中添加表字段的2列值

asp.net - 如何在 ASP.NET 中处理下拉列表控件中的长文本

c# - ASP.NET MVC 下拉列表不会填充结果

delphi - TClientDataSet出现错误消息

iphone - Apple IOS 应用程序和 Delphi TidCmdTcpServer

wpf - 即使左键单击按钮也保留网格焦点状态

WPF DataGrid 需要在网格行中垂直滚动条

android - Android 版 Firemonkey 中的游戏循环

将 XORShift 算法从 C 代码转换为 Delphi 代码

grails - 用于组合框的jQuery easyui数据网格编辑器未随grails一起加载