So, ich habe es nur ganz kurz gemacht, eigentlich könnte man das noch deutlich schöner machen. Ergebnisse jedenfalls:
Das
Umschalten zwischen den beiden Listen benötigt bei
9000 Personen ca. 2ms
Der
Refresh der Personen-Liste benötigt bei
9000 Personen ca. 2ms
Das
Umschalten zwischen den beiden Listen benötigt bei
10000 Adressen ca. 2ms
Der
Refresh der Adressen-Liste benötigt bei
10000 Adressen ca. 2ms
Das Projekt liegt im Anhang.
Füge ich die Daten direkt in die Knoten als Daten ein, dauern die Operationen ca. 10ms. Sprich anders als im Anhang:
Delphi-Quellcode:
procedure FillData(AListView: TVirtualStringTree; AContainer: TDataListContainer);
var
i: Integer;
begin
AListView.BeginUpdate;
try
AListView.Clear;
if Assigned(AContainer.DataList) then
for i := 0 to AContainer.DataList.Count - 1 do
AListView.AddChild(nil, AContainer.DataList[i]);
finally
AListView.EndUpdate;
end;
end;
Und:
Delphi-Quellcode:
procedure TForm6.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: string);
var
CurrentEntry: TObject;
begin
CurrentEntry := TObject(Sender.GetNodeData(Node)^);
if CurrentEntry is TPerson then
...