Treeview   zodpovězená otázka

ASP.NET WebForms

Zdravim, začínám se rozkoukávat v asp.net a narazil jsem na jeden problém ohledně treeview. Řekněme, že mám nějaké xml asi takového formátu :

<uroven_1>

<nadpis urvne 1 />

<uroven_2>

<nadpis urovne 2 />

...

No a protože tagy uroven jsou nosné pro strukturu, zadefinuji je v data bindings, jenže popis a názvy úrovní mám napsané v tagu nadpis urovne a potřeboval bych tedy abych mohl do TextField zadat atribut né z aktuálního tagu uroven ,ale z dceřinného tagu nadpis.

Je nějaká možnost jak to udělat, nebo musím přetransformovat xml?

Dík

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vlastná komponenta.Vždy keď chcete inú, ako bežnú funkčnosť, spravíte vlastnú triedu.Dediacu buď priamo z Treeview, alebo z niektorého jeho "predka".Minimálne z triedy Control.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Hmm tak jsem se dal do tvoření vlastního kódu, který mi naplní treeview tak, jak potřebuji, ale narazil jsem na jeden problém. mám tuto rekurzivní funkci, která projde xml dokument a vytvoří treeNode prvky, jenže dokázal jsem udělat pouze to, aby se všechny přidaly na první úroveň treeview. Jinými slovy umím udělat to, aby se pro každý xml element uroven vytvořil prvek treeNode, ale neumím udělat to, aby se teeNode vytvořené na základě rekurzivního volání ukládaly ne do první linie ale do nadřazených treeNode.

private void VytvorUroven(XmlNodeList nodeList) {
    
        foreach (XmlNode node in nodeList)
        {
            switch (node.NodeType)
            {
                case XmlNodeType.Element:
                   
                    if (node.Name.Substring(0, 6) == "UROVEN" && node.Name!="UROVEN_P")
                    {
                        if (node.FirstChild.Attributes != null)
                        {
                            foreach (XmlAttribute attrib in node.FirstChild.Attributes)
                            {
                                if (attrib.Name == "O")
                                {
                                    string name = attrib.Value;
                                    TreeNode newNode = new TreeNode();
                                    newNode.Text = name;
                                    TreeView1.Nodes.Add(newNode);
                                }
                            }
                        }
                        
                        
                    }
                    if (node.Name == "UROVEN_P")
                    {
                        foreach (XmlNode paragraf in node.ChildNodes)
                        {
                            foreach (XmlAttribute attrib in paragraf.Attributes)
                            {
                                if (attrib.Name == "O")
                                {                                 
                                    string name = attrib.Value;
                                    TreeNode newNode = new TreeNode();
                                    newNode.Text = name;
                                    TreeView1.Nodes.Add(newNode);
                                }
                            }
                        }
                    }
                    break;

            }
          if (node.HasChildNodes)
                VytvorUroven(node.ChildNodes);
        }
      }

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Počkať. Aká je vlastne štruktúra toho xml?Také niečo?

REM ===========XML==============
<Layer1>
  <Dungeons/>
  <Layer2>
    <HyjalSummit/>
    <Layer3>
      <Bosses/>
      <Layer4>
        <Archimonde/>
      </Layer4>
    </Layer3>
  </Layer2>
</Layer1>
REM ==========Treeview==========
-Dungeons
  -HyjalSummit
    -Bosses
      Archimonde

Na prevod medzi xml a treeview(alebo podobnými kombináciami) sa zíde funkcia, ktorá má za parameter XmlNode a vracia TreeNode.Vytvorí novú TreeNode, do Text priradí názov prvého nájdeného elementu a na zvyšné zavolá sama seba.To, čo vyjde z rekurzívneho volania, pridá do TreeNode a máte to.

Alebo(skôr pre WinForms) vytvoríte nový typ dediaci z TreeNode, ktorý bude mať XmlNode vo vlastnosti, v konštruktore spravíte podobnú vec: do Nodes pridáte nové XmlElementTreeNode(alebo ako to mienite pomenovať), ktorým predáte sub-elementy XmlNode.Príkazy na pridávanie, upravovanie a mazanie jednoducho aplikujete aj na XmlNode, aj na TreeNode.Už som takto robil XmlEditor(síce pre WinForms) a fungovalo mi to.Tak vám to ale rýchlo "zožere" kopu pamäte, takže s takým prístupom na 100KB Xml dokumenty zabudnite.Obecne 100KB Xml len ťažko načítate do objektového modelu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

To je přesně ono, takovou funkci jsem si nakonec vytvořil, jenže pořád nedokážu vytvořit tu správnou strukturu. Nemohl byste mi prosím napsat, jak by to vypadalo pro ten případ xml,co jste uvedl?Moc bymi to pomohlo. Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak už nic, už jsem to dokázal jak jsem potřeboval. Děkuji moc za radu vytvořit funkci která přímo vrací treeNode, to mi moc pomohlo.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

http://www.chariscreationsgf.com/auto-in... online auto insurance 90469 http://www.chariscreationsgf.com/cheap-a... cheap auto insurance =-PPP http://www.myoregonmotors.com/ auto insurance 983021 http://www.chariscreationsgf.com/cheap-c... car insureance utlxu

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback