Ich möchte Daten aus verschiedenen SQL-Tabellen dynamisch laden und in einem TVirtualStringTree
anzeigen. Dies bedeutet, dass der Header und der Inhalt jeder Spalte jedes Mal unterschiedliche Arten von Daten enthalten.So definieren Sie einen TVirtualStringTree mit dynamischer Datenstruktur
Mein Problem ist, wie in Bezug auf Speichernutzung, die Definition des Datensatzes und den Zeiger für diesen Fall zu optimieren.
Mein Denken war es wie dies zu tun:
type
TDataType = (dtUnknown, dtString, dtInteger, dtText, dtFloat, dtDateTime, dtDate, dtTime, dtBoolean);
TData = record
DataType: TDataType;
AsString: String;
AsInteger: Integer;
AsText: TStrings;
AsWord: Word;
AsDateTime: TDateTime;
AsDate: TDate;
AsTime: TTime;
AsBoolean: Boolean;
end;
TTreeData = array of TData;
PTreeData= ^TTreeData;
In der Praxis nur 2 Felder aus dem Datensatz werden Daten enthalten: DataType
(die ganze Zeit) und ein zweites Feld, hängt von den DataType
definiert (zB AsString
, AsInteger
). Werden auch die anderen Felder als Speicher belegt, wenn Node initialisiert wird? Auch mag ich nicht, dass die DataType
jedem Knoten zugeordnet ist. Es muss einen einfachen Weg geben, diesen Datensatz zu optimieren.
Bitte einige Vorschläge.
Ich bin mir ziemlich sicher, dass es bereits einen datenbewussten Nachkommen dieser Komponente gibt. Hast du schon danach gesucht? Es könnte sich als effektiver erweisen als der Versuch, dieses Feature selbst neu zu erfinden. –
Hier ist eine datensensitive Version von VTV: https://github.com/TurboPack/VirtualTreeView – Johan
Ist es datensensitiv? Ich kann hier nur den üblichen TVirtualStringTree/TVirtualDrawTree sehen, keine neuen Komponenten und keine neuen Eigenschaften. – Andrew