Hallo zusammen,
ich habe ein TVirtualDataSet von UniDac in einem TDataModule definiert und stelle die Daten über TDataSource in einem DBGrid dar.
Dem TVirtualDataSet wird eine TObjectList wie folgt zugeordnet.
Delphi-Quellcode:
type
TSerNr = class
private
FID: Integer;
FSerNr: string;
FName: string;
public
property ID: Integer read FID write FID;
property SerNr: string read FSerNr write FSerNr;
property Typ: string read FName write FName;
constructor Create;
destructor Destroy; override;
end;
TSerNrList = class(TObjectList<TSerNr>)
end;
procedure TDataModule1.vdsSerNrGetFieldValue(Sender: TObject; Field: TField; RecNo: Integer; out Value: Variant);
var
SerNr: TSerNr;
begin
SerNr := TSerNr(SerNrList.Items[RecNo - 1]);
case Field.FieldNo of
1: Value := SerNr.ID;
2: Value := SerNr.SerNr;
3: Value := SerNr.Typ;
end;
end;
procedure TDataModule1.vdsSerNrGetRecordCount(Sender: TObject; out Count: Integer);
begin
Count := SerNrList.Count;
end;
Das Ganze hat einwandfrei funktioniert, als ich TVirtualDataSet und TDataSource direkt auf dem TForm abgelegt habe. Sobald ich die beiden Komponenten aber in eine DataModule verschiebe, funktioniert es nicht mehr.
Die Liste wird korrekt angebunden, d.h. das vdsSerNrGetRecordCount wird aufgerufen und im Grid eine entsprechende Anzahl leerer Zeilen erzeugt.
Ein Haltepunkt in vdsSerNrGetFieldValue zeigt aber, dass dieses Event nie aufgerufen wird.
Wenn ich TVirtualDataSet und TDataSource wieder ins Form schiebe geht es.
Das Vorgehen ist in TForm und TDataModule genau das gleiche
- Komponenten auf das Form/DataModule legen
- TDataSource mit TVirtualDataSet verknüpfen
- OnGetFieldValue und OnGetRecordCount definieren
- Liste erzeugen
- TVirtualDataSet.Open aufrufen
Hat jemand eine Idee woran das liegen könnte?
Ich arbeite mit Delphi 10.3.2 und UniDac 7.4.12
Grüße
Gerd