Avatar billede websam Nybegynder
15. marts 2006 - 19:03 Der er 10 kommentarer og
2 løsninger

Genering af xml fil til brug i treeview ?

Hejsa,

Jeg skal have noget hjælp til at generere en xml fil som jeg skal bruge til visning i et treeview.

Jeg har en række produkt grupper med underliggende grupper som der ikke er noget fast antal på, altså ingen begrænsning på hvor mange undergrupper der kan tilføjes.

I min database har jeg så et "id" felt og et tilhørende "gid" felt. Mine hovedgrupper har "gid" = 0 og de underliggende grupper har "gid" tilhørende den overliggende gruppes "id".

Jeg prøver at illustrere :

0-1
  1-3
    3-7
    3-8
  1-4
    4-9
    4-10
0-2
  2-5
    5-11
    5-12
      12-14
      12-15
      12-16
  2-6
    6-13

Jeg skal så have hjælp til at få genereret en xml fil hvorfra jeg kan trække de hentede data ud i et treeview.

Er der en der kan hjælpe med det ?

/Websam
Avatar billede dr_chaos Nybegynder
15. marts 2006 - 19:38 #1
jeg bruger denne metode :
public static void SkrivStandardRepTraer()
    {
       
        foreach (DataRow drKontrolType in dsKontrolTyper.Tables[0].Rows)
        {
            DataSet ds; //hentidpåniveau1
            //hvis der ikke er nogen tabeller
            if(ds.Tables.Count > 0)
            {
             

                    //opret ny xml fil
                    System.Xml.XmlWriter xmlw = new System.Xml.XmlTextWriter(HttpContext.Current.Server.MapPath("../xmlmenuer/Reptrae.xml"), null);
                    //skriv start element
                    xmlw.WriteStartElement("?xmlversion='1.0'?");
                    //for alle rækker på niveau1
                    foreach (DataRow masterRow in ds.Tables[0].Rows)
                    {
                        xmlw.WriteStartElement("Niveau1");
                        xmlw.WriteAttributeString("Text", (string)masterRow["Titel"]);
                        //for alle rækker på niveau2
                        DataSet ds1 = HentRepTraeNiveau2Punkter((int)masterRow["RepTraeNiveau1ID"]);
                        if (ds1.Tables.Count > 0)
                        {
                            foreach (DataRow Niveau2Children in ds1.Tables[0].Rows)
                            {
                                xmlw.WriteStartElement("Niveau2");
                                xmlw.WriteAttributeString("Text", (string)Niveau2Children["Titel"]);
                                //for alle rækker på niveau3
                                DataSet ds2 = HentRepTraeNiveau3Punkter((int)Niveau2Children["RepTraeNiveau2ID"]);
                                foreach (DataRow Niveau3Children in ds2.Tables[0].Rows)
                                {
                                    xmlw.WriteStartElement("Niveau3");
                                    xmlw.WriteAttributeString("Text", (string)Niveau3Children["Titel"]);
                                    xmlw.WriteAttributeString("Value", Niveau3Children["RepTraeNiveau3ID"].ToString());
                                    xmlw.WriteEndElement();
                                }
                                xmlw.WriteEndElement();
                            }
                        }
                        xmlw.WriteEndElement();
                    }
                    //skriv slut element

                    //luk xmlwriter
                    xmlw.Close();
                }
        }
    }
Avatar billede dr_chaos Nybegynder
15. marts 2006 - 19:39 #2
Den er godt nok i c# men giver et god ide om hvordan du gør
Avatar billede websam Nybegynder
15. marts 2006 - 20:05 #3
Ok den fik jeg lige hurtigt oversat til vb'sk, men den kræver jo at jeg ved hvor mange niveauer jeg har og det gør jeg ikke på forhånd, da der er mulighed for uendelige niveauer.

Ret mig hvis jeg tager fejl ?

/Websam
Avatar billede dr_chaos Nybegynder
15. marts 2006 - 20:15 #4
Så skal du lave den rekursiv altså hvor den kalder sig selv
Altså hvor du henter et id ud og laver et starttag.
Kalder den igen i tilfælde af at der under niveauer.
Det kan dog blive en anelse bøvlet.
Avatar billede dr_chaos Nybegynder
15. marts 2006 - 20:19 #5
Jeg har ikke tid i aften men kan hjælpe dig imorgen.
Avatar billede websam Nybegynder
15. marts 2006 - 20:23 #6
Jeg snublede lige over denne :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/treeview.asp

klik på "Using Dynamic Tree Node Population" under contents der snakker de om noget med at der kan loades efter behov alså trækker den ikke efter data før der er et behov for det.

Det lyder mere som noget jeg skal bruge, så er der dog ikke tale om generering af xml, men direkte træk fra databasen, som jeg så kan lave lidt om på så det passer til min struktur.

/Websam
Avatar billede dr_chaos Nybegynder
15. marts 2006 - 20:51 #7
kender godt. gik selv væk fra træet med xml filer og begyndte at bruge det dynamiske med database udtræk
Avatar billede dr_chaos Nybegynder
15. marts 2006 - 20:52 #8
det er ikke svært at implementere og med clientcallback enabled fungerer det ret godt
Avatar billede websam Nybegynder
15. marts 2006 - 20:53 #9
ok, jeg ser om ikke jeg kan stykke noget sammen ud fra ovenstående artikel, du smidder et svar så kan vi lige dele denne gang ;o)

/Websam
Avatar billede dr_chaos Nybegynder
15. marts 2006 - 20:55 #10
svar :)
Avatar billede websam Nybegynder
15. marts 2006 - 22:07 #11
Zz......sove tid
Avatar billede websam Nybegynder
15. marts 2006 - 22:08 #12
Dohhhh......
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester