function TForm1.FindOrCreateItem(ItemParent: TFmxObject; ItemPath:
string; InsertDuplicate: Boolean=False): TTreeViewItem;
var
i: Integer;
begin
if ContainsStr(ItemPath, PathDelim)
then
ItemParent := FindOrCreateItem(ItemParent, ExtractFileDir(ItemPath), False);
ItemPath := ExtractFileName(ItemPath);
if not InsertDuplicate
then
if ItemParent
is TCustomTreeView
then begin
for i := TCustomTreeView(ItemParent).Count
downto 0
do begin
Result := TCustomTreeView(ItemParent).Items[i];
if SameStr(Result.Text, ItemPath)
then
Exit;
end;
end else if ItemParent
is TTreeViewItem
then begin
for i := TTreeViewItem(ItemParent).Count
downto 0
do begin
Result := TTreeViewItem(ItemParent).Items[i];
if SameStr(Result.Text, ItemPath)
then
Exit;
end;
end else
raise Exception.Create('
Ungültiger Parent-Typ.');
Result := TTreeViewItem.Create(ItemParent);
Result.Parent := ItemParent;
Result.Text := ItemPath;
end;
procedure TForm1.PresentDataset;
var
ItemPath:
string;
begin
TreeView1.BeginUpdate;
try
TreeView1.Clear;
ClientDataSet1.First;
while not ClientDataSet1.Eof
do
begin
ItemPath := ClientDataSet1Jahr.AsString + PathDelim + ClientDataSet1KW.AsString + PathDelim
+ ClientDataSet1Tag.AsString + PathDelim + ClientDataSet1ID.AsString;
with FindOrCreateItem(TreeView1, ItemPath, True)
do begin // True = Datensätze mit doppelter "ID" auch mehrfach einfügen
//Text := ClientDataSet1ID.AsString; // hat FindOrCreateItem bereits gesetzt
Tag := ClientDataSet1.RecNo;
// so hätte man einen Zugang vom Item zu seinem DataRecord
end;
ClientDataSet1.Next;
end;
finally
TreeView1.EndUpdate;
end;
end;