was ist da falsch? TreeView zeigt mir die Header an, aber nicht die Nodes.
Ich fülle eine Treeview aus einer CSV-Datei mit unbekannter Anzahl Spalten. Daher in der Type-Definition ein Array.
Die Header baue ich auch zur Laufzeit - das klappt.
Dann lade ich die Nodes - RootNodeCount = 1145 nach dem Laden. Nodes werden aber nicht angezeigt.
Ersetze ich das Array durch einen String und lese nur die erste Spalte aus der CSV ein, erhalte ich eine Anzeige für jeden Node.
Ich hab schon erheblich komplexerer Strukturen im TreeView erfolgreich verarbeitet.
Aber hier sehe ich den Fehler einfach nicht. Hab's schon einen Tag liegen lassen. Manchmal muss einfach mal eine Pause machen um den eigenen Fehler zu sehen. Ohne Erfolg.
Code: Alles auswählen
type
TImportColumn = Array[0..100] of string;
TImportData = record
Spalte : TImportColumn;
end;
PImportData = ^TImportData;
procedure TForm1.vstImportGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
begin
vstImport.NodeDataSize:=SizeOf(TImportData);
end;
procedure TForm1.vstImportGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: String);
var Data: PImportData;
begin
Data := vstImport.GetNodeData(Node);
CellText := Data^.Spalte[Column];
end;
procedure TForm1.FormShow(Sender: TObject);
var sZeile : String;
iCol, iZeile : Integer;
vtc : TVirtualTreeColumn;
xNode : PVirtualNode;
Data: PImportData;
tslCSV : TStringList;
begin
tslCSV.LoadFromFile('C:\Applikationen\TM1_Strukturen\Kostenarten.csv');
vstImport.Clear;
vstImport.Header.Columns.Clear;
sZeile := ConvertEncoding(tslCSV.Strings[0],GuessEncoding(tslCSV.Strings[0]), EncodingUTF8);
iColCount := ParseCount(';',sZeile);
for iCol := 1 to iColCount do
begin
s := Parse(';',sZeile,iCol);
vtc := vstImport.Header.Columns.Add;
vstImport.Header.Columns[iCol-1].Style:=vsText;
vstImport.Header.Columns[iCol-1].Options := [coAllowClick,coDraggable,coEnabled,coParentBidiMode,coResizable,coShowDropMark,coVisible,coAllowFocus,coEditable];
vstImport.Header.Columns[iCol-1].Width:=100;
vstImport.Header.Columns[iCol-1].Text:=s;
end;
// füllen des Treeview aus der TStringlist
for iZeile := 1 to tslCSV.Count-1 do
begin
sZeile := ConvertEncoding(tslCSV.Strings[iZeile],GuessEncoding(tslCSV.Strings[iZeile]), EncodingUTF8);
XNode := vstImport.AddChild(nil);
Data := vstImport.GetNodeData(XNode);
fillchar(data^,sizeof(data^),0);
for iCol := 1 to iColCount do
Data^.Spalte[iCol-1] :=Parse(';',sZeile,iCol);
end;
end;