我在Delphi 2007 Pro中有一个填充TDBGrid的数据库。当网格完成填充时,我想根据从网格处理的数据自动填充列表框。我可以通过观察并等待网格完全填充数据集然后调用我的下一个程序来手动执行此操作。是否有一个事件允许在网格自动填充时调用下一个过程?感谢。
答案 0 :(得分:3)
如果您使用的是TDataSet
后代,则可以使用其AfterOpen
事件:
"AfterOpen is called after the dataset establishes access to its data and the dataset is put into dsBrowse state."
编辑(Duilio's answer的评论的代码示例):在下面,'CDS'是'TClientDataSet'。 'TDBGrid'也通过'TDataSource'附加到数据集,但网格的功能不受下面代码的任何影响,或者ListBox的功能与网格相关..
procedure TForm1.CDSAfterOpen(DataSet: TDataSet);
var
sl: TStringList;
begin
sl := TStringList.Create;
try
sl.Sorted := True;
sl.Duplicates := dupIgnore;
DataSet.DisableControls;
try
DataSet.First;
while not DataSet.Eof do begin
sl.Add(DataSet.Fields[1].AsString);
DataSet.Next;
end;
DataSet.First;
finally
DataSet.EnableControls;
end;
ListBox1.Items.Assign(sl);
finally
sl.Free;
end;
end;
答案 1 :(得分:0)
我认为你可以执行:
TDataSet.Open;
TDataSet.FetchAll;
{At this point DBGrid should be populated}
这将从您的表中获取所有数据。完成后,应填充DBGrid。