Avatar billede aspnet33 Nybegynder
28. juli 2010 - 17:57 Der er 8 kommentarer og
1 løsning

Hvordan udlister jeg vha for-løkke ?

Sagen er den at jeg gerne ville udliste til labels vha en for-løkke, og jeg vil ha alle records udlistet...

Og jeg kan forstå på alle mine errors, at det her er en hel forkert måde at gøre det på: altså, i min for-løkke...

Så derfor viser jeg de 2 eksempler i for-løkken, jeg har forsøgt... Har selvf ikke forsøgt dem begge på én gang...


protected void udlist(object sender, EventArgs e)
    {
        SqlConnection DER = new SqlConnection();
        DER.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
        SqlCommand SOM = new SqlCommand();
        SOM.Connection = DER;
        SOM.CommandType = CommandType.Text;
        SOM.CommandText = "SELECT id, navn, antal, price FROM produkt";


        DER.Open();

        SqlDataReader reader = null;
       
        reader = SOM.ExecuteReader();
        if (reader.Read())
        {
            int i;
            i = 0;
            for (i = 0; i < 10;i++)
            {

        string navn;

                navn = reader["navn"].ToString();
                this.Controls["Label" + i].Text = navn;
               
             
                this.Controls["Label" + i].Text = reader["navn"].ToString();


            }
        }


        DER.Close();
    }

I min aspx hedder mine Labels Label1, Label2 osv...

Hvis jeg skriver det sådan her lige ud,

this.Controls["Label" + i].Text = reader["navn"].ToString();

så kommer den med denne error:

"The best overload method match for System.Web.UI.ControlCollection.this[int]" has som invalid arguments.

Og Argument'1' can not convert from string to int

Denne error kommer den også med, hvis jeg skriver dether:

                navn = reader["navn"].ToString();
                this.Controls["Label" + i].Text = navn;

Et el andet siger mig, at den skal ha noget index noget på BEGGE sider af =...Altså noget a la...[i].Text..?

Skal lige siges at jeg aldrig har prøvet at rode med for/foreach-løkker...de kan jo ellers mange ting ift repeater...:-)

NB: Jeg ved godt at man bare ku ha brugt en repaeter el datalist...men så ville man jo ikke ku få udlistet dem i hver deres labels...
Avatar billede arne_v Ekspert
28. juli 2010 - 18:01 #1
Jeg tror altsaa at repeater er den rigtige loesning.

Mulige workarounds:

1) iterer over Controls og find den med matchende navn

2) lave et array af Label med ref til alle dine labels
Avatar billede aspnet33 Nybegynder
28. juli 2010 - 18:28 #2
Hvordan ville du gøre det..?

For man kan jo ikke bare lave en repeater med labels på aspx-siden og så smide f.eks. navn ind i Label1 vha reader fra code-behind-filen...

Så jeg forstår ikke helt hvor(dan) du vil bruge den repaeter...
Avatar billede lasserasch Juniormester
28. juli 2010 - 20:44 #3
1. Jeg ville også bruge en Repeater til det.

Du kan se et eksempel på hvordan det nemt kan gøres her:
http://www.beansoftware.com/ASP.NET-Tutorials/Repeater-Control.aspx

Du kan også fra codebehind hooke dig op på 'ItemDataBound' eventet på din repeater hvorfra du så kan tilgå alle dine labels og andre kontroller som er oprettet inde i

<ItemTemplate> sektionen for din repeater.

2. Din Exception opstår fordi dette er ugyldigt:
this.Controls["Label" + i]

Det skal være this.Controls["Label" + i.ToString())

Mvh.
Lasse
Avatar billede lasserasch Juniormester
28. juli 2010 - 20:50 #4
Sådan her selvfølgelig...

this.Controls["Label" + i.ToString()]
Avatar billede aspnet33 Nybegynder
28. juli 2010 - 23:11 #5
Du får hermed de 30 point, selvom det desværre ikke spiller helt som det skal...

Jeg forstår udmærket din løsning med i.ToString()...det gør min kode åbenbart bare ikke...den skaber sig stadigt over at den ikke kan konvertere string til string...
Avatar billede aspnet33 Nybegynder
28. juli 2010 - 23:13 #6
Havde helt glemt at jeg skulle skrive til Lasse og be ham og at afgi svar...men det gør jeg så hermed...
Avatar billede lasserasch Juniormester
28. juli 2010 - 23:25 #7
Jamen hermed svar.

Men som Arne siger, så er du altså på galt spor med den kode. Brug en Repeater, den kan sagtens det du vil have den til...


Mvh.
Lasse
Avatar billede lasserasch Juniormester
28. juli 2010 - 23:26 #8
Har du prøvet det her:

string lb = "Label" + i.Tostring();
this.Controls[lb];
Avatar billede arne_v Ekspert
31. juli 2010 - 20:23 #9
Så vidt jeg kan se så kan Controls kun indexeres med int ikke med String.

FindControl metoden kan bruges med String. Og det er en lidt fixere variant af mit forslag #1.

Mit forslag #2 er nok i virkeligheden det nemmeste.
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