2

TDBGridがあります。私の目的は、DBGridのフィールド名を検索し、それをEditのTextプロパティと比較することです。それらが等しい場合は、

一致するものを見つけた列全体をリストボックスに書き込みたい。

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;

これは、私がやろうとしていることの架空のコードです...

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 に答える