Ja ja, das alte Refresh-Problem....
Wenn es dir nichts ausmacht, bei einem Refresh jedesmal alle Daten neu zu laden, dann verwende DisableControls/EnableControls sowie ein Bookmark während des Neuladens:
Delphi-Quellcode:
Procedure DatasetRefresh (aDataset : TDataset);
Var
B : TBookmark;
Begin
aDataset.DisableControls;
Try
B := aDataset.GetBookmark;
aDataSet.Close;
aDataset.Open;
Try // Schützen, weil der ehemals aktuelle Datensatz nun weg sein könnte
aDataset.GotoBookmark (B);
Except
End;
Finally
aDataset.FreeBookmark (B);
aDataset.EnableControls;
End;
End;
Natürlich geht das noch ausgefeilter, z.B. über den FocusedRecordIndex des TcxGrids, aber das Prinzip ist klar.
Alternative (wenn das Grid nur zur Anzeige dient):
- Entweder ein Unbound Grid verwenden (TcxGridTableView) und die Datacontroller.Values befüllen
- Oder ein Memory-Dataset odr
ADO-DS (Lockmode = BatchOptimistic) mit einer Kopie der Master-Dateil Tabellen bilden
und alle
DB-Operationen auf diese Clones duplizieren.