2

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

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

使用带有 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;

这是我试图做的假想代码......

PS:我还在用Delphi 7,(教育原因)

4

2 回答 2

2

您不能直接从 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;
于 2012-12-26T15:11:26.777 回答
0

至于 DBGrid 只显示数据的摘录,恕我直言,您应该

  • 获取数据集的书签
  • 禁用控件
  • 首先使用,而不是 eof 与您的数据集一起使用,将 Dataset.FieldbyName(Edit1.text).asString 添加到您的列表中
  • 转到书签
  • 启用控件
于 2012-12-26T15:15:02.423 回答