You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi动态关联DataSource与DataSet填充DBGrid的实现求助

动态切换DBGrid的DataSource和DataSet解决方案

核心思路

把20组DataSource、DataSet与对应客户名称建立映射关系,通过选中的客户名称快速匹配到目标组件,实现DBGrid2的动态关联。


步骤1:建立客户-数据源映射集合

在Form2的创建事件中初始化映射,用字典存储客户名称与对应DataSource、DataSet的配对:

uses System.Generics.Collections;

type
  TForm2 = class(TForm)
    DtSource01: TDataSource;
    ADO01: TADODataSet;
    // 其他19组DataSource和DataSet组件...
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FCustomerDataMap: TDictionary<string, TPair<TDataSource, TDataSet>>;
  public
    property CustomerDataMap: TDictionary<string, TPair<TDataSource, TDataSet>> read FCustomerDataMap;
  end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  FCustomerDataMap := TDictionary<string, TPair<TDataSource, TDataSet>>.Create;
  // 逐个添加客户与数据源的映射(示例,根据实际客户名称修改)
  FCustomerDataMap.Add('客户A', TPair<TDataSource, TDataSet>.Create(DtSource01, ADO01));
  FCustomerDataMap.Add('客户B', TPair<TDataSource, TDataSet>.Create(DtSource02, ADO02));
  // ...依次添加剩余18组客户的映射关系
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  FCustomerDataMap.Free; // 销毁字典,避免内存泄漏
end;

步骤2:修改DBGrid1双击事件实现动态切换

获取选中的客户名称,从映射集合中匹配对应组件,关联给DBGrid2:

procedure TMain.DBGrid1DblClick(Sender: TObject);
var
  CustomerName: string;
  TargetDataPair: TPair<TDataSource, TDataSet>;
begin
  CustomerName := DBGrid1.SelectedField.AsString;
  Form2.Caption := CustomerName;

  // 尝试从映射中获取客户对应的数据源
  if Form2.CustomerDataMap.TryGetValue(CustomerName, TargetDataPair) then
  begin
    // 关联DBGrid2的数据源和数据集
    DBGrid2.DataSource := TargetDataPair.Key;
    DBGrid2.DataSource.DataSet := TargetDataPair.Value;
    
    // 确保数据集处于激活状态
    if not TargetDataPair.Value.Active then
      TargetDataPair.Value.Open;
      
    Form2.Show;
  end
  else
  begin
    ShowMessage('未找到客户【' + CustomerName + '】对应的数据源配置');
  end;
end;

关键注意事项

  • 客户名称匹配:映射中的客户名称必须与DBGrid1选中的名称完全一致(包括大小写、空格),否则无法匹配。
  • 数据集准备:每个DataSet需预先配置好对应客户的数据查询逻辑(比如SQL语句包含客户筛选条件),或已加载好对应数据。
  • 内存管理:必须在Form2销毁时释放字典对象,防止内存泄漏。

内容的提问来源于stack exchange,提问作者SHKODRAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:01:32