Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Beispiel für DSharp TreeViewPresenter mit mehreren Node Ebenen? (https://www.delphipraxis.net/200614-beispiel-fuer-dsharp-treeviewpresenter-mit-mehreren-node-ebenen.html)

jus 7. Mai 2019 23:26

Beispiel für DSharp TreeViewPresenter mit mehreren Node Ebenen?
 
Hallo,

ich möchte den TreeViewPresenter von DSharp in Verbindung mit VirtualStringTree nutzen, doch mit meinen bescheidenen Kenntnissen komme ich irgendwie nicht vom Fleck. :oops: Wie muß man die Daten erzeugen, damit man diese an den TreeViewPresenter übergeben kann, damit der VirtualStringTree Nodes mit mehreren Ebenen anzeigt? Daran scheitere ich schon, da ich bisher kein einziges Beipsiel dazu gefunden habe. :? :gruebel:
Hätte wer dazu ein Beispiel?

lg,
jus

Stevie 8. Mai 2019 09:48

AW: Beispiel für DSharp TreeViewPresenter mit mehreren Node Ebenen?
 
Simple hierarchische Datenstruktur - z.B. Ordner und Items. 2 Datatemplates für Ordner und Items, beide an den TVP hängen, ColumnDefinitions erstellen, Liste der Objekte auf der Rootebene an den TVP hängen - fertig.

Minimalcode (vorher VST und TVP auf die Form und dem TVP den VST an seiner TreeView Eigenschaft zuweisen, außerdem eine Column auf dem TVP anlegen)

Delphi-Quellcode:
uses
  Spring,
  Spring.Collections,
  DSharp.Core.DataTemplates;

type
  TNamedItem = class
  private
    fName: string;
  public
    constructor Create(const name: string);
    property Name: string read fName write fName;
  end;

  TFolder = class(TNamedItem)
  private
    fItems: IList<TObject>;
  public
    constructor Create(const name: string);
    property Items: IList<TObject> read fItems;
  end;

  TItemTemplate = class(TDataTemplate<TNamedItem>)
    function GetItems(const Item: TNamedItem): IObjectList; override;
    function GetValue(const Item: TNamedItem;
      const ColumnIndex: Integer): TValue; override;
  end;

procedure TTVPDemoForm.FormCreate(Sender: TObject);
var
  items: IObjectList;
  folder1, folder2: TFolder;
begin
  items := TCollections.CreateObjectList<TObject> as IObjectList;
  folder1 := TFolder.Create('Folder 1');
  folder2 := TFolder.Create('Folder 1.1');
  folder2.Items.AddRange([TNamedItem.Create('File 1'), TNamedItem.Create('File 2')]);
  folder1.Items.Add(folder2);
  items.Add(folder1);

  TreeViewPresenter1.View.ItemTemplate := TItemTemplate.Create;
  TreeViewPresenter1.View.ItemsSource := items;
end;

{ TNamedItem }

constructor TNamedItem.Create(const name: string);
begin
  inherited Create;
  fName := name;
end;

{ TFolder }

constructor TFolder.Create(const name: string);
begin
  inherited Create(name);
  fItems := TCollections.CreateObjectList<TObject>;
end;

{ TItemTemplate }

function TItemTemplate.GetItems(const Item: TNamedItem): IObjectList;
begin
  if Item is TFolder then
    Result := TFolder(Item).Items as IObjectList
  else
    Result := nil;
end;

function TItemTemplate.GetValue(const Item: TNamedItem;
  const ColumnIndex: Integer): TValue;
begin
  Result := Item.Name;
end;

end.

jus 8. Mai 2019 19:31

AW: Beispiel für DSharp TreeViewPresenter mit mehreren Node Ebenen?
 
Hallo Stefan,

das Beispiel hilft mir schon extrem weiter. Vielen Dank! :thumb:

lg,
jus

Wishmaster 22. Jun 2020 06:34

AW: Beispiel für DSharp TreeViewPresenter mit mehreren Node Ebenen?
 
aus der demo, ist da ein weg 'File 1' in kolumne 1 und 'File 2' in kolumne 2 anzeigen zu lassen?

Stevie 22. Jun 2020 10:46

AW: Beispiel für DSharp TreeViewPresenter mit mehreren Node Ebenen?
 
Zitat:

Zitat von Wishmaster (Beitrag 1467974)
aus der demo, ist da ein weg 'File 1' in kolumne 1 und 'File 2' in kolumne 2 anzeigen zu lassen?

Nein, der TVP verbindet rows mit den Items, nicht Columns - wie viele Columns sollte es denn geben, wenn ich nicht 2 sondern 50 Items anhänge?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz