WPF C# Többszintű TreeView
2015-05-17T21:56:00+02:00
2015-05-18T10:31:40+02:00
2022-08-09T15:00:30+02:00
padro
Sziasztok!

Szeretném futásidőben szerzett adatok alapján megjeleníteni a vállalati hierarchiát egy treeview-ban. Ehhez több, mint három szint ábrázolására van szükségem, viszont a fellelt példák vagy bedrótozott adatokból töltik fel a fát, vagy max. 3 szintig mennek.
Bíztam abban, hogy a következő linken megtalálom a megoldást How do I code: WPF: TreeView example (Part 4) , de nem fordul le, mert nem ismeri az io-t (io.Path.GetFileName), pedig megvan a using System.IO.
Keresgéltem a GetFileName-re és a GetDirectories-ra, de hiába.
Nem tudok rájönni, mi hiányzik.

(Win7, Visual Studio 2013)
Mutasd a teljes hozzászólást!
Így próbáld: System.IO.Path.GetFileName
Mutasd a teljes hozzászólást!

  • Köszönöm! Működik.
    Bár nem világos, hogy miért kell végig írni.
    Mutasd a teljes hozzászólást!
  • Azért kell a teljes útvonal, mert van egy System.Windows.Shapes névtér, és abban is megtalálható egy Path osztály. Persze kiszedheted usingból, de előfordulhat, hogy később kelleni fog.
    Mutasd a teljes hozzászólást!
  • Értem.
    Még egyszer köszönöm.
    Mutasd a teljes hozzászólást!
  • Szia!

    Az általad megadott példa alapvetően jó (könyvtár struktúra megjelenítése fában, ala explorer), de mivel már 2 HR rendszerben is programoztam hasonlót, ha nem baj, röviden leírnám az alapvető elveket a tapasztalataim alapján:

    A cégek felépítése egy gráf, a legtöbbnél egy sima fa. A gráfokat bejárni (megjeleníteni, stb.) a definíciójuk miatt rekurzív rutinokkal lehet (egészen pontosan olyanokkal, amelyet stack-et használnak, de a rekurzív függvények ilyenek). A rekurzivitás miatt elméletileg nincs mélység korlát (3, amit Te írtál egyes példáknál), a korlát csak a stack mérete (de a 32/64 bit miatt garantált, hogy minden céget elbírnak a mai gépek).

    A futás időben szerzett adat valószínűleg azt jelenti, hogy talán adatbázisból jönnek az adatok. Ha igen, akkor valszeg van egy tábla, amely parent - child szervezeti egység párokat tartalmaz (ezek képviselik a gráfokban az összekötött csúcsokat, cég esetében a közvetlen alá-fölé rendeltséget), Parent a felettes egység, child a közvetlenül alatt levő. Amikor a parent invalid (pl. NULL), az azt jelenti, hogy az adott child egységnek nincs felettese, ez a fa gyökere, tehát pl. a Vezérigazgatóság stb. (és akkor valszeg van egy olyan tábla is, amely a szervezeti egységeket tartalmazza, név, kód stb., nyilván ennek a táblának az egyedi azonosítói a hierarchiát megadó tábla parent és child mezői).

    A bejárást szolgáló rekurzív függvénynek kapnia kell egy parent azonosítót, a kezdeti hívásnál ez NULL (vagy az az érték, ami az invalidot jelenti (0, -1 stb.)). A függvény kikeresi az összes olyan rekordot, ahol a parent egyenlő a kapott értékkel. A kapott listán végig kell menni, minden egyes elemet berakni a treeview-ba, majd azonnal meghívni önmagát úgy, hogy a paraméter az aktuális child elem azonosítója. (a rekurzív függvényeknél kell leállási feltétel, itt nyilván az lesz, hogy a keresés nem talál az adott azonosító alá tartozó child elemeket).

    A treeview elemek .Tag property-jébe beszoktam írni a child azonosítót, innen tudja a program, hogy végül is melyik adatbázisbeli egységet képviseli (ha esetleg később a felhasználó valami plusszt is kezdeni akar a fával, pl. jobb egy elemen, és adatok kiírása a képviselt szervezeti egységről stb.).

    Az egészet meg lehet spékelni azzal is, hogy a program nem csak a szervezeti egységeket írja ki, hanem minden egység alá az ott dolgozókat, volt ilyen feladatom, de ez a lényeget nem érinti.

    Ha a leírtak ismertek voltak számodra, akkor bocs, ha nem, akkor remélem, tudtam segíteni.
    Mutasd a teljes hozzászólást!
  • Szia!

    Nagyon jól összefoglaltad, mit kell tenni. Az idézett forrásban is ott van a rekurzív hívás (CreateFolderTree).
    Valóban adatbázisból olvasom a szervezet-hierarchiát és ennek megjelenítéséhez is - ahogy írod - a rekurzió egy jó megoldás. Bízom abban, hogy ez már nem jelent gondot.
    Természetesen nemcsak nézelődésre szánom a megjelenítést, hanem lekérdezések kiindulópontja lesz a fa. Majd... Egyelőre csak szabadidőmben ismerkedem a WPF-fel, mert nekem tetszik.

    Köszönöm a hozzászólásod!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd