Avatar billede kbha Nybegynder
14. december 2011 - 09:44 Der er 3 kommentarer og
1 løsning

Alternativ til foreach løkker

Hej

Jeg har lavet et treeview og for at finde alle "punkterne" (i det her tilfælde organisationer) har jeg loopet mig igennem databasen med massere af foreach løkker. Det tror jeg umiddelbart ikke er den smarteste løsning - Derfor søger jeg nu et andet forslag..

Jeg kunne godt tænke mig en rekursiv metode, så hvis det kan lade sig gøre ville det være alletiders..

Lige nu ser alle mine løkker således ud:

foreach (DataRow RowOne in objHT.SelectOrgWhereParentOrgID(OrgID).Rows)
                {
                    TreeNode tnTopOrganisation = new TreeNode();

                    tnTopOrganisation.Text = RowOne["OrgEnhedLang"].ToString();
                    tnTopOrganisation.Value = RowOne["OrgID"].ToString();

                    tnSearchedOrganisation.ChildNodes.Add(tnTopOrganisation);

                    foreach (DataRow RowTwo in objHT.SelectOrgWhereParentOrgID(Convert.ToInt32(RowOne["OrgID"])).Rows)
                    {
                        TreeNode tnFirstUnderOrganisation = new TreeNode();

                        tnFirstUnderOrganisation.Text = RowTwo["OrgEnhedLang"].ToString();
                        tnFirstUnderOrganisation.Value = RowTwo["OrgID"].ToString();

                        tnTopOrganisation.ChildNodes.Add(tnFirstUnderOrganisation);

                        foreach (DataRow RowThree in objHT.SelectOrgWhereParentOrgID(Convert.ToInt32(RowTwo["OrgID"])).Rows)
                        {
                            TreeNode tnSecondUnderOrganisation = new TreeNode();

                            tnSecondUnderOrganisation.Text = RowThree["OrgEnhedLang"].ToString();
                            tnSecondUnderOrganisation.Value = RowThree["OrgID"].ToString();

                            tnFirstUnderOrganisation.ChildNodes.Add(tnSecondUnderOrganisation);

                            foreach (DataRow RowFour in objHT.SelectOrgWhereParentOrgID(Convert.ToInt32(RowThree["OrgID"])).Rows)
                            {
                                TreeNode tnThirdUnderOrganisation = new TreeNode();

                                tnThirdUnderOrganisation.Text = RowFour["OrgEnhedLang"].ToString();
                                tnThirdUnderOrganisation.Value = RowFour["OrgID"].ToString();

                                tnSecondUnderOrganisation.ChildNodes.Add(tnThirdUnderOrganisation);

                                foreach (DataRow RowFive in objHT.SelectOrgWhereParentOrgID(Convert.ToInt32(RowFour["OrgID"])).Rows)
                                {
                                    TreeNode tnFourthUnderOrganisation = new TreeNode();

                                    tnFourthUnderOrganisation.Text = RowFive["OrgEnhedLang"].ToString();
                                    tnFourthUnderOrganisation.Value = RowFive["OrgID"].ToString();

                                    tnThirdUnderOrganisation.ChildNodes.Add(tnFourthUnderOrganisation);

                                    foreach (DataRow RowSix in objHT.SelectOrgWhereParentOrgID(Convert.ToInt32(RowFive["OrgID"])).Rows)
                                    {
                                        TreeNode tnFifthUnderOrganisation = new TreeNode();

                                        tnFifthUnderOrganisation.Text = RowSix["OrgEnhedLang"].ToString();
                                        tnFifthUnderOrganisation.Value = RowSix["OrgID"].ToString();

                                        tnFourthUnderOrganisation.ChildNodes.Add(tnFifthUnderOrganisation);

                                        foreach (DataRow RowSeven in objHT.SelectOrgWhereParentOrgID(Convert.ToInt32(RowSix["OrgID"])).Rows)
                                        {
                                            TreeNode tnSixthUnderOrganisation = new TreeNode();

                                            tnSixthUnderOrganisation.Text = RowSeven["OrgEnhedLang"].ToString();
                                            tnSixthUnderOrganisation.Value = RowSeven["OrgID"].ToString();

                                            tnFifthUnderOrganisation.ChildNodes.Add(tnSixthUnderOrganisation);

                                            foreach (DataRow RowEigth in objHT.SelectOrgWhereParentOrgID(Convert.ToInt32(RowSeven["OrgID"])).Rows)
                                            {
                                                TreeNode tnSeventhUnderOrganisation = new TreeNode();

                                                tnSeventhUnderOrganisation.Text = RowEigth["OrgEnhedLang"].ToString();
                                                tnSeventhUnderOrganisation.Value = RowEigth["OrgID"].ToString();

                                                tnSixthUnderOrganisation.ChildNodes.Add(tnSeventhUnderOrganisation);

                                                foreach (DataRow RowNine in objHT.SelectOrgWhereParentOrgID(Convert.ToInt32(RowEigth["OrgID"])).Rows)
                                                {
                                                    TreeNode tnEighthUnderOrganisation = new TreeNode();

                                                    tnEighthUnderOrganisation.Text = RowNine["OrgEnhedLang"].ToString();
                                                    tnEighthUnderOrganisation.Value = RowNine["OrgID"].ToString();

                                                    tnSeventhUnderOrganisation.ChildNodes.Add(tnEighthUnderOrganisation);

                                                    foreach (DataRow RowTen in objHT.SelectOrgWhereParentOrgID(Convert.ToInt32(RowNine["OrgID"])).Rows)
                                                    {
                                                        TreeNode tnNineUnderOrganisation = new TreeNode();

                                                        tnNineUnderOrganisation.Text = RowTen["OrgEnhedLang"].ToString();
                                                        tnNineUnderOrganisation.Value = RowTen["OrgID"].ToString();

                                                        tnEighthUnderOrganisation.ChildNodes.Add(tnNineUnderOrganisation);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
Avatar billede Syska Mester
14. december 2011 - 09:49 #1
Det kan godt lade sig gøre.

Tag en TreeNode og dit første object som parameter.

Efter hvert object er kørt igennem kalder du din method igen med den nye TreeNode du opretter.
Avatar billede kbha Nybegynder
14. december 2011 - 10:38 #2
Tusinde tak for hjælpen.

Smid et svar og du skal få dine point :)
Avatar billede kbha Nybegynder
14. december 2011 - 10:39 #3
Hvis der var andre der skulle være interesseret.

Jeg lavede denne metode:

    void NytNiveau(int OrgID, TreeNode IncomingTnName)
    {
        foreach (DataRow Row in objHT.SelectOrgWhereParentOrgID(OrgID).Rows)
        {
            TreeNode tnOrganisation = new TreeNode();

            tnOrganisation.Text = Row["OrgEnhedLang"].ToString();
            tnOrganisation.Value = Row["OrgID"].ToString();

            IncomingTnName.ChildNodes.Add(tnOrganisation);

            NytNiveau(Convert.ToInt32(Row["OrgID"]), tnOrganisation);
        }
    }

Den bliver kaldt første gang når den har fundet den indtastede organisation, og derefter looper den selv igennem indtil den ikke kan finde mere..
Avatar billede Syska Mester
14. december 2011 - 13:21 #4
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