所以我有一个TDBGrid,我的目的是搜索DBGrid的Fieldname并将其与Edit的Text属性进行比较,如果它们相等,那么,

我想将找到匹配项的整个列写到ListBox中。

使用带fieldcount的for循环,我可以比较FieldName,尽管由于没有行或可以使用的rowcount属性,所以我不知道如何获取整个列的索引。

for i:=0 to DBGrid1.FieldCount-1 do
begin
 if DBGrid1.Fields[i].FieldName=Edit1.Text then
   for j:=1 to DBGrid1.RowCount-1 do
     ListBox1.Items.Add(DBGrid1.Rows.Fields[i].Index.AsString);
end;


这是我正在尝试执行的操作的虚构代码。

附注:我仍在使用Delphi 7,(出于教育原因)

最佳答案

您不能直接从DbGrid获取行值。相反,您必须浏览用于填充DbGrid的数据集。

本示例假定您使用的是TClientDataSet

for i := 0 to DBGrid1.FieldCount - 1 do
begin
  if DBGrid1.Fields[i].FieldName = Edit1.Text then
  begin
    ClientDataSet1.DisableControls;
    try
      ClientDataSet1.First();
      while (not ClientDataSet1.Eof) do
      begin
        ListBox1.Items.Add(ClientDataSet1.FieldByName(Edit1.Text).AsString);
        ClientDataSet1.Next();
      end;
    finally
      ClientDataSet1.EnableControls;
    end;
  end;
end;

09-19 06:37