Einzelnen Beitrag anzeigen

Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: cxGrid RecordChanged

  Alt 6. Feb 2013, 08:42
'Kettenreaktion' trifft den Nagel auf den Kopf.

Delphi-Quellcode:
Procedure TMyForm.InitializeData;
Begin
  MyProductGridView.OnRecordChanged := Nil;
  Try
    LoadDataFromDatabase();
    ..
  Finally
    MyProductGridView.OnRecordChanged := MyProductGridViewRecordChangedEvent;
  End
End;
So in etwa. Natürlich alle relevanten Events vorher per ':= Nil' aushängen und hinterher wieder einhängen.

Eine Alternative ist die Verwendung eines privaten boolschen Feldes 'fInitializing'.
Delphi-Quellcode:
Procedure TMyForm.InitializeData;
Begin
  fInitializing := True;
  Try
    LoadDataFromDatabase();
    ..
  Finally
    fInitializing := False;
  End
End;
und in jedem Eventhandler
Delphi-Quellcode:
Procedure TMyForm.MyProductGridViewRecordChanged(...);
Begin
  if fInitializing then exit; // <-- diese Zeile am Anfang jedes Eventhandlers
...
End;
Beides hat Vor- und Nachteile. Ich tendiere zur 2.Möglichkeit, weil ich dadurch generell steuern kann, wann meine Events feuern sollen.

Falls die Daten schon geladen sind und dein Problem beim instantiieren der Form auftritt, dann würde ich so vorgehen

Delphi-Quellcode:
Procedure TMyForm.FormCreate(...)
Begin
  MyGridView.DataBinding.DataSource := Nil;
End;

Procedure TMyForm.FormActivate(...)
Begin
  MyProductGridView.OnRecordChanged := Nil;
  Try
    MyGridView.DataBinding.DataSource := MyDataSource;
  Finally
    MyProductGridView.OnRecordChanged := MyProductGridViewRecordChangedEvent;
  End
End;

Geändert von Furtbichler ( 6. Feb 2013 um 08:46 Uhr)
  Mit Zitat antworten Zitat