Avatar billede califfo Nybegynder
19. april 2006 - 09:13 Der er 12 kommentarer og
1 løsning

Data til TreeView 2

Jeg har i et tidligere indlæg (http://www.eksperten.dk/spm/703465), fået svar på et treeview. Nu har jeg så en udvidelse til samme spørgsmål.

De filer jeg omtaler bliver pt indlæst i mit program og dataene indsat i en database. Alle dataene er indtastet i kommaseparerede linier. Hver linie repræsenterer et element.

Nå, Jeg vil så lave det sådan at hver fil indlæses og filnavnet bruges som element i træstrukturen. Jeg vil derefter gerne have at det første element i hver linie repræsenterer hver linie i filen og at det samtidig bruges som navn på underelementet i træstrukturen. Jeg prøver lige at tegne det igen.

Root
|
---Filnavn_1
  |
  ---1. element i filen
  |
  ---2. element i filen
  |
  ---3. element i filen
  |
---Filnavn_2
  |
  ---1. element i filen
  |
  ---2. element i filen
  |
  ---3. element i filen

Jeg har som sagt allerede indlæst filen til en database. Mon ikke det er smart at bruge noget af det?

Min kode til at indlæse filen ser således ud.

/* ---------------Load Devices------------------- */
        private void LoadDevices() // Load Devices
        {
            string line;

            // Read the file and display it line by line.
            System.IO.StreamReader file =
                new System.IO.StreamReader(DeviceFilePath);

            while ((line = file.ReadLine()) != null)
            {
                DeviceObject.Add(new Devices(line));
            }

            file.Close();
        }
/* ------------------end------------------------- */


/* --------------Update Devices------------------ */
        private void UpdateDataSetDev ()
        {
            foreach (Devices Dev in DeviceObject)
            {
                DataTable dt = ds.Tables["DeviceTable"];
                DataRow drDev = dt.NewRow();
                Dev.ToDataRow(ref drDev);

                dt.Rows.Add(drDev);
            }
        }

Håber det giver lidt mening.
Avatar billede califfo Nybegynder
19. april 2006 - 09:15 #1
Tegningen er kun en skitse. Jeg ved ikke hvor mange linier der er i hver fil.
Avatar billede nielle Nybegynder
19. april 2006 - 18:56 #2
Jeg er ikke sikker på at jeg forstår din beskrivelse. Kan du give nogle mere konkrete eksempler på hvordan filerne kunne se ud og hvordan dette så skal vises i træet?

Jeg er heller ikke sikker på hvorfor at der blandes en database ind i sagen? Er det ikke fint nok at læse tingene direkte fra filerne? Det er som regel kun en kilde til problemer at have de samme data liggende mere end på et centralt sted.
Avatar billede califfo Nybegynder
20. april 2006 - 10:59 #3
Ok,...

Jeg henter data ind fra nogle filer, lægger dem i en db hvorfra de er tilgængelige indtil der skal laves ændringer i disse data. Ændringerne ændres først i db'en og derfra i filerne. Jeg vil gerne have at mit treeview tager informationerne fra db'en, da jeg ydermere vil vise resten af dataene i andre vinduer i programmet. Det skal bl.a. være sådan at man i treeview vælger en enhed og får yderligere oplysninger om denne enhed vist i et andet vindue.

...Giver det mere mening?

Filerne ser således ud:
___________________
datatype1;datatype2;datatype3;datatype4;...osv...;datatype8
datatype1;datatype2;datatype3;datatype4;...osv...;datatype8
datatype1;datatype2;datatype3;datatype4;...osv...;datatype8
datatype1;datatype2;datatype3;datatype4;...osv...;datatype8
___________________

Som det ses, så er dataene semmikolon separerede. Hver fil kommer til at se sådan ud.

Det er meningen at jeg vil bruge dataene således i treeview og i et vindue ved siden af

Root
|
---Filnavn_1
  |
  ---1. element i filen(datatype1)
  |
  ---2. element i filen(datatype1)
  |
  ---3. element i filen(datatype1)
  |
---Filnavn_2
  |
  ---1. element i filen(datatype1)
  |
  ---2. element i filen(datatype1)
  |
  ---3. element i filen(datatype1)

Når man så markerer et element, vil man få resten af oplysningerne fra den række i db'en vist i nogle label's i et vindue ved siden af.

Jeg håber det giver et billede af hvad jeg mener.
Avatar billede califfo Nybegynder
20. april 2006 - 11:08 #4
...Fik jeg gjort klart at en række i filen/db'en repræsenterer et element.
Avatar billede califfo Nybegynder
20. april 2006 - 11:08 #5
...Og det var så et spørgsmål,... uden spørgsmålstegn!!!
Avatar billede Syska Mester
20. april 2006 - 19:25 #6
Vil du have samme data både i filerne og i databasen??? eller mig der slet ikke forstår hvad du er ude på.

// ouT
Avatar billede nielle Nybegynder
20. april 2006 - 22:23 #7
Hvorfor ikke bare hente data fra filerne:

        private void Form1_Load(object sender, EventArgs e)
        {
            DirectoryInfo scanDi = new DirectoryInfo(@"C:\Source.Net20\e703672");
            FileInfo[] fiArr = scanDi.GetFiles("*.csv");

            TreeNode root = new TreeNode("Root");

            foreach (FileInfo fi in fiArr)
            {
                TreeNode tn = new TreeNode(fi.Name);

                using (StreamReader sr = new StreamReader(fi.FullName))
                {
                    string line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        line = line.Split(';')[0];
                        TreeNode subTn = new TreeNode(line);
                        tn.Nodes.Add(subTn);
                    }
                }

                root.Nodes.Add(tn);
            }

            this.treeView1.Nodes.Add(root);

            this.treeView1.ExpandAll();
        }
Avatar billede califfo Nybegynder
21. april 2006 - 10:22 #8
Jeg bruger også samme data andre steder i programmet og jeg er tilhænger af at det er en db der skal tage sig af dette.

Er det da meget mere besværligt at bruge en db, fremfor at hive dataene direkte fra filerne?

Jeg kan godt se dit argument for at fjerne mellemledet, men jeg vil gerne holde mig til db'en...
Avatar billede nielle Nybegynder
21. april 2006 - 15:02 #9
Jeg er generelt modstræbende over for at man har sine data liggende mere end et sted for det skaber bare en masse problemer med at holde det synkroniseret... :^)

Nå, men hvis du hellere vil styre det fra din database så skal denne blok:

                using (StreamReader sr = new StreamReader(fi.FullName))
                {
                    string line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        line = line.Split(';')[0];
                        TreeNode subTn = new TreeNode(line);
                        tn.Nodes.Add(subTn);
                    }
                }

- udskiftes med en loop som i stedet henter fra databasen.

Dvs. at der skal noget logik til at forbinde sig til databasen, så noget "SELECT ditFelt FROM dinTabel" som udtrækker det data som høre til filnavnet fi.FullName, og så endelig en reader som gennemløver og udtrækker data.
Avatar billede califfo Nybegynder
21. april 2006 - 15:08 #10
Du er en engel. Jeg prøver det såsnart jeg kommer hjem.

Tusind tak.
Avatar billede nielle Nybegynder
29. april 2006 - 15:06 #11
Har du fået det til at vire?
Avatar billede califfo Nybegynder
30. april 2006 - 09:21 #12
Jepsen. Tusind tak. Smid et svar.
Avatar billede nielle Nybegynder
30. april 2006 - 09:26 #13
Svar :^)
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