Delphi实现DBGrid';s行

Delphi实现DBGrid';s行,delphi,rows,dbgrid,Delphi,Rows,Dbgrid,所以我有一个TDBGrid,我的目的是搜索DBGrid的Fieldname,并将其与我的Edit的Text属性进行比较,如果它们相等 我想把我找到匹配项的整个专栏写到一个列表框中 使用带有fieldcount的for循环,我可以比较FieldName,但是由于没有可以使用的rows或rowcount属性,我不知道如何获得整个列的索引 for i:=0 to DBGrid1.FieldCount-1 do begin if DBGrid1.Fields[i].FieldName=Edit1.Te

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

我想把我找到匹配项的整个专栏写到一个列表框中

使用带有fieldcount的for循环,我可以比较FieldName,但是由于没有可以使用的rows或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;
这是我想做的一个想象的代码


注意:我仍然在使用Delphi7(出于教育原因)

您无法直接从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;

因为DBGrid只显示数据的摘录,所以您应该

  • 获取数据集的书签
  • 禁用控件
  • 首先使用数据集,而不是eof,添加 Dataset.FieldbyName(Edit1.text)。与列表关联
  • 转到书签
  • 启用控件