2012-12-26 2 views
2

그래서 나는 그들이 동일한 다음, 델파이는 DBGrid를의 행에 도달

은 내가했습니다 전체 열을 쓰고 싶어하고, 내 목적은 DBGrid를의 fieldName은을 TDBGrid를 검색하고 내 편집의 텍스트 속성과 경우를 비교 한 ListBox에 일치하는 항목을 찾았습니다.

fieldcount와 for 루프를 사용하면 FieldName을 비교할 수 있습니다. 행이나 행 개수 속성이 없기 때문에이 전체 열의 인덱스를 얻는 방법을 모르겠다.

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 : 나는 아직도 당신은 행을 얻을 수 델파이 7 (교육 이유)

답변

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; 
0

지금까지 DBGrid를 단지 당신이

  • 처음
  • 사용하는 데이터 집합의 책갈피를 얻을
  • 하지 않도록 제어한다 이럴 데이터의 발췌 표시 할 때와 EOF하지 동안 데이터 세트, Dataset.FieldbyName (Edit1.text) .asString을 목록에 추가하십시오.
  • 고토 북마크
  • 컨트롤 사용 가능