在运行时重新分配数据源

use*_*145 4 delphi tdbgrid

我做了一些搜索,只找到了更多未解答的问题.:)

使用D5pro.

我想在运行时将DataSource重新分配给TDBGrid.我有七个相同的结构化DataSet,根据按钮单击,我希望在网格中显示相应的DataSet.

我已经尝试了一切,我无法让它显示下一个DataSet.它坚持在启动时分配的第一个.我正在采取过度杀伤方法,但仍然没有任何工作.这就是我现在所处的位置.

procedure SetSource(var aSrc : TDataSource);
begin
  aSrc.DataSet.Close;
  dbgridShowData.DataSource:=aSrc;
  aSrc.DataSet.Open;
  aSrc.DataSet.First;
  aSrc.DataSet.Refresh;
end;
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

谢谢

小智 6

您可以非常轻松地在运行时轻松更改DBGrid显示的数据集.有两种方法:

1:使用分配给DBGrid.DataSource的单个DataSource,并将DataSource.DataSet更改为所需的DataSet.这是一个简单的示例,其中包含在运行时进行的所有分配.

procedure TForm1.FormCreate(Sender: TObject);
begin
  DBGrid1.DataSource := DataSource1;

  DataSet1.Active := true;
  DataSet2.Active := true;
  DataSet3.Active := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DataSource1.DataSet := DataSet1;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  DataSource1.DataSet := DataSet2;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  DataSource1.DataSet := DataSet3;
end;
Run Code Online (Sandbox Code Playgroud)

2:为每个DataSet使用DataSource,并将DBGrid.DataSource更改为所需的DataSource.这是一个简单的示例,其中包含在运行时进行的所有分配.

procedure TForm1.FormCreate(Sender: TObject);
begin
  DataSource1.DataSet := DataSet1;
  DataSource2.DataSet := DataSet2;
  DataSource3.DataSet := DataSet3;

  DataSet1.Active := true;
  DataSet2.Active := true;
  DataSet3.Active := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DBGrid1.DataSource := DataSource1;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  DBGrid1.DataSource := DataSource2;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  DBGrid1.DataSource := DataSource3;
end;
Run Code Online (Sandbox Code Playgroud)

如果定义DBGrid的列,则DataSet的结构必须相同,或者在更改显示的数据集时必须更改列定义.

我更喜欢每个DataSet使用一个DataSource,因为它更灵活.