AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Firemonkey Treeview mit Daten aus ClientDataSet füllen
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey Treeview mit Daten aus ClientDataSet füllen

Ein Thema von ByTheTime · begonnen am 22. Okt 2014 · letzter Beitrag vom 24. Okt 2014
 
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.393 Beiträge
 
Delphi 12 Athens
 
#9

AW: Firemonkey Treeview mit Daten aus ClientDataSet füllen

  Alt 23. Okt 2014, 19:44
Eine kleine Pfadbehandlung und schon kann man mit einer Funktion beliebig tiefe Pfade im Tree suchen und/oder erstellen.
Delphi-Quellcode:
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;
Aber ich merk immer mehr, daß dieser TreeView einfach nur ein totaler Schrotthaufen ist.
  • Es gibt keinen (unsichtbaren) Root-Knoten, womit man in dem Baum den Hauptknoten und die Unterknoten unterschiedlich behandeln muß, obwohl der Code gleich aussieht.
  • Das public ItemByIndex(i) ist ja sowas von sinnlos und ja genau dem Items[i], aber es gibt keinerlei Funktionen zum Suchen von Items, vorallem nicht über den Text.
  • Selbst der uralte VCL-TreeView ist dem Ding haushoch überlegen und hat unmassen mehr Features. (angefangen bei den Icons und einer Sortierung)
  • Einfügen an beliebiger Stelle (Insert mit Index) und Verschieben von Knoten.
  • Und LiveBindings hat man hier total vergessen, obwohl man dafür so viel Werbung macht und meint wie cool die doch seinen. (nja, an allen Ecken haben die sowieso enorme Bugs und sind nicht wirklich benutzbar)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (23. Okt 2014 um 19:46 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz