Zitat von
daywalker299:
Achso...
Den String Vergleich mache ich deshalb weil die Splaten verschiebbar sind. Oder bleibt zur Laufzeit der ColumIndex gleich dem ColumIndex zur Entwurfszeit?
Wenn nicht, macht der String Vergleich schon Sinn, oder? Natürlich nur mit dem Break.
Nein, der ColumIndex bleibt der ColumIndex zur Entwurfszeit, auch wenn du zur Laufzeit die Spalten vertauschst.
.BeginUpdate und .EndUpdate empfiehlt sich nur, wenn du .RootNodeCount änderst (bzw über .AddChild Datensätze hinzufügst, was ich nicht empfehle)
Ich mache das immer so (mit einer Suchfunktion, ist immer ganz praktisch
):
Delphi-Quellcode:
type
TMyTreeData = record
Nr: Integer;
end;
PMyTreeData = ^TTreeData;
ArrayOfInteger = array of Integer;
var
Nutzdaten: array of TMeineSelbstDefiniertenNutzdaten;
Ergebnis: ArrayOfInteger;
procedure foo;
begin
Ergebnis := SucheInNutzdatenNachWort(Nutzdaten, Wort);
VST.BeginUpdate;
VST.Clear;
VST.RootNodeCount := Length(Ergebnis);
VST.EndUpdate;
end;
procedure Bla.OnVSTInitNode(...);
var
Data: PMyTreeData;
begin
Data := VST.GetNodeData(Node);
Data^.Nr := Ergebnis[Node.Index];
end;
procedure Bla.OnVSTGetText(...);
var
Data: PTreeData;
begin
Data := VST.GetNodeData(Node);
with Data^ do
case ColumIndex of
0: ColumText := Nutzdaten[Nr].Wert1;
1: ColumText := Nutzdaten[Nr].Wert2;
else ColumText := '';
end;
end;
Du musst nur am Anfang deine Nutzdaten mit den Werten der Datenbank befüllen.
Wenn du willst kann ich dir auch noch eine schnelle Suchfunktion hier rein stellen.