Avatar billede simsen Mester
28. december 2006 - 09:36 Der er 8 kommentarer og
1 løsning

Fejl ved selected index

Hej,

Jeg har 2 tabeller i en database, hvor tabel1 lister jeg 3 værdier, som jeg korrekt får vist i en dropdownlist. I tabel2 har jeg et felt, der skal vise det valgte fra dropdownlisten.

Jeg har følgende kode til det:

DataTable logoAligmentValues = new DataTable();

        if (settings.GetlogoAligment(ref logoAligmentValues) == Status.Success)
        {
            //Gets data from Settings
            DataTable settingValues = new DataTable();
            if (settings.GetSettings(ref settingValues) == Status.Success)
            {
                lblTest.Text = settingValues.Rows[0]["logoAligment"].ToString();

                if (settingValues.Rows[0]["logoAligment"].ToString() == "Venstre")
                {
                    ddlLogoAligment.SelectedIndex = 2;
                }
                else if (settingValues.Rows[0]["logoAligment"].ToString() == "Højre")
                {
                    ddlLogoAligment.SelectedIndex = 3;
                }
                else if (settingValues.Rows[0]["logoAligment"].ToString() == "Centrer")
                {
                    ddlLogoAligment.SelectedIndex = 4;
                }
                else
                {
                    ddlLogoAligment.SelectedIndex = 0;
                }

            }

            ddlLogoAligment.DataSource = logoAligmentValues;
            ddlLogoAligment.DataTextField = "logoAligment";
            ddlLogoAligment.DataValueField = "logoAligmentId";
            ddlLogoAligment.DataBind();
        }

Som I kan se - har jeg forsøgt at skrive indholdet af settingValues.Rows[0]["logoAligment"].ToString(); ud i en label. Den skriver Højre i lablen.

Alligevel når jeg kører koden, så kan jeg se, at den går udenom mine if statements og går direkte til else sætningen - at der ikke står noget i settingValues.Rows[0]["logoAligment"].ToString();

Hvad gør jeg forkert?

mvh
simsen :-)
Avatar billede dr_chaos Nybegynder
28. december 2006 - 15:53 #1
Tjek evt for white spaces.
Avatar billede simsen Mester
28. december 2006 - 16:13 #2
hvordan gør jeg det?
Avatar billede dr_chaos Nybegynder
28. december 2006 - 16:32 #3
prøv at bruge settingValues.Rows[0]["logoAligment"].ToString().Trim()
Avatar billede thrytter Nybegynder
28. december 2006 - 22:36 #4
Ville gribe det lidt anderledes an.

if (settings.GetlogoAligment(ref logoAligmentValues) == Status.Success)
            {       
                ddlLogoAligment.DataSource = logoAligmentValues;
                ddlLogoAligment.DataTextField = "logoAligment";
                ddlLogoAligment.DataValueField = "logoAligmentId";
                ddlLogoAligment.DataBind();

                //Gets data from Settings
                DataTable settingValues = new DataTable();

                if (settings.GetSettings(ref settingValues) == Status.Success)
                {
                    string selectedValue = settingValues.Rows[0]["logoAligment"].ToString().Trim();
                   
                    if (ddlLogoAligment.Items.FindByText(selectedValue) != null)
                    {
                        ddlLogoAligment.SelectedItem.Selected = false;
                        ddlLogoAligment.Items.FindByText(selectedValue).Selected = true;
                    }               
                }
            }

Alternativt kan du udtrække id'et og bruge FindByValue i stedet for.
Avatar billede simsen Mester
29. december 2006 - 09:29 #5
Så er jeg tilbage på pinden igen....

dr chaos

Det du kom med virkede. Jeg går udfra, at .Trim() fjerner alle blanke tegn?

Smid et svar og pointsene er dine.

thrytter

Vil du ændre det pga. performance eller hvorfor?

mvh
simsen :-)
Avatar billede simsen Mester
29. december 2006 - 09:38 #6
thrytter

Jeg ville lige prøve din, men den virker ikke.

Den går fejl i:  if (ddlLogoAligment.Items.FindByText(selectedValue) != null)

Jeg kan se (når jeg laver run to curser) at selectedValue = Centrer men alligevel går den ikke ind i selve if statementet. Altså den går ikke ind og bruger:

ddlLogoAligment.SelectedItem.Selected = false;
ddlLogoAligment.Items.FindByText(selectedValue).Selected = true;

mvh
simsen :-)
Avatar billede dr_chaos Nybegynder
29. december 2006 - 09:47 #7
simsen thrytter's løsning vil ikke ændre performance, men det er den rigtige løsning og den er kønnere end at bruge if sætninger.
prøv evt med:

if (settings.GetlogoAligment(ref logoAligmentValues) == Status.Success)
            {     
                ddlLogoAligment.DataSource = logoAligmentValues;
                ddlLogoAligment.DataTextField = "logoAligment";
                ddlLogoAligment.DataValueField = "logoAligmentId";
                ddlLogoAligment.DataBind();

                //Gets data from Settings
                DataTable settingValues = new DataTable();

                if (settings.GetSettings(ref settingValues) == Status.Success)
                {
                    string selectedValue = settingValues.Rows[0]["logoAligment"].ToString().Trim();
                 
                  ddlLogoAligment.SelectedIndex = ddlLogoAligment.Items.IndexOf(ddlLogoAligment.Items.FindByText(selectedValue ))       
                }
            }
Avatar billede simsen Mester
29. december 2006 - 10:28 #8
dr_chaos

Håber du gider hjælpe mig igennem .... for ja det er klart bedre. Har den næste dropdownliste som er MEGA lang - så mange if statements jeg skal igennem, hvis såfremt :-/

Men din går også fejl. Jeg har skrevet "Højre" i databasen og den vælger som selected "Venstre".

Har det noget at gøre med, at jeg måtte i min if statement lave det som følgende:

//if (settings.GetSettings(ref settingValues) == Status.Success)
            //{
            //    lblTest.Text = settingValues.Rows[0]["logoAligment"].ToString();

            //    if (settingValues.Rows[0]["logoAligment"].ToString().Trim() == "Venstre")
            //    {
            //        ddlLogoAligment.SelectedIndex = 0;
            //    }
            //    else if (settingValues.Rows[0]["logoAligment"].ToString().Trim() == "Højre")
            //    {
            //        ddlLogoAligment.SelectedIndex = 1;
            //    }
            //    else if (settingValues.Rows[0]["logoAligment"].ToString().Trim() == "Centrer")
            //    {
            //        ddlLogoAligment.SelectedIndex = 2;
            //    }
            //    else
            //    {
            //        ddlLogoAligment.SelectedIndex = 0;
            //    }

            //}

Altså at den starter med 0 istedet for 1?

mvh
simsen :-)
Avatar billede dr_chaos Nybegynder
30. december 2006 - 16:34 #9
prøv lige at paste hele din kode som vælger index, med mit foreslag.
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