Как узнать, когда Delphi TDBGrid завершил заполнение базы данных? - PullRequest
1 голос
/ 07 октября 2010

У меня есть база данных, заполняющая TDBGrid в Delphi 2007 Pro.Когда заполнение сетки завершится, я хочу автоматически заполнить список на основе данных, обработанных из сетки.Я могу сделать это вручную, наблюдая и ожидая, пока сетка полностью заполнится набором данных, а затем вызвав мою следующую процедуру.Есть ли событие, которое позволило бы вызвать следующую процедуру, когда сетка автоматически заполняется?Спасибо.

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

Если вы используете потомка TDataSet, вы можете использовать его AfterOpen событие:

"AfterOpen is called after the dataset establishes access to its data and the dataset is put into dsBrowse state."

edit (пример кода для комментариев для Ответ Duilio ): ниже CDS - это TClientDataSet.TDBGrid также присоединяется к набору данных посредством TDataSource, но функциональность сетки никоим образом не зависит от кода ниже или функциональности ListBox с сеткой в ​​этом отношении.

procedure TForm1.CDSAfterOpen(DataSet: TDataSet);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Sorted := True;
    sl.Duplicates := dupIgnore;

    DataSet.DisableControls;
    try
      DataSet.First;
      while not DataSet.Eof do begin
        sl.Add(DataSet.Fields[1].AsString);
        DataSet.Next;
      end;
      DataSet.First;
    finally
      DataSet.EnableControls;
    end;

    ListBox1.Items.Assign(sl);
  finally
    sl.Free;
  end;
end;
0 голосов
/ 10 октября 2010

Я думаю, вы могли бы выполнить:

TDataSet.Open;
TDataSet.FetchAll;
{At this point DBGrid should be populated}

Это позволит получить все данные из вашей таблицы.Когда вы закончите, ваша DBGrid должна быть заполнена.

...