Avatar billede danisher Nybegynder
19. juli 2004 - 10:42 Der er 27 kommentarer og
1 løsning

Tilføje Labels fra code behind

Hej alle

Hvordan kan jeg tilføje labels fra code behind?

Jeg ved hvordan man tilføjer HTML til siden, men jeg vil gerne lave nogle felter, som jeg kan gøre visible, hvis brugeren ikke har afkrydset noget i form'en.

private void Button1_Click(object sender, System.EventArgs e)

Denne funktion, skulle så gerne løbe alle felter igennem, og tjekke om de er afkrydset eller lign. Problemet er nemlig at det kan variere, hvor mange felter der skal markeres, og derved varierer det hvor mange labels jeg skal bruge.
Normalt kan man jo tilføje en Label ved:
Label test = new Label();

Men jeg kan jo ikke bruge den samme variabelnavn, kan jeg?

Er der nogen der kan se en løsning? Det behøver som ikke engang være med labels, men det er bare den nemmeste løsning jeg kan se?

På forhånd tak!
Avatar billede snepnet Nybegynder
19. juli 2004 - 11:02 #1
Du kan godt lave sådan en her :

Label l = null;
for(int i=0;i<10;i++)
{
    l = new Label();
    l.Text = "hej";
    someControlContainer.Add(l);
}
Avatar billede danisher Nybegynder
19. juli 2004 - 11:08 #2
Kan man så sætte den ind i HTML'en?

Label current = null;
for (int i=0; i<10; i++)
  test.InnerHTML += "<td>" + current + "</td>";

??
Avatar billede snepnet Nybegynder
19. juli 2004 - 11:16 #3
Du skal i løkken sørge for at instantiere en label ved
current = new Label();
Og angive en tekst på den ved
current.Text ="hvaddernuskalstå";

Efterfølgende kan du så godt sætte den ind i html-en ved :
test.InnerHTML += "<td>" + current.Text + "</td>";

Men der er noget du lige skal være opmærksom på :
Hvis du i f.eks. Page_Load... I din code-behind skriver :

Label label = null;
for(int i=0;i<10;i++)
{
    label = new Label();
    label.Text = "hej";
    this.Page.Controls[1].Controls.Add(label);
}

Så bliver de genererede labels sat ind i html-en automatisk - det sørger frameworket for. Den er du med på ikke ?
Avatar billede danisher Nybegynder
19. juli 2004 - 11:23 #4
Ja, men spørgsmålet er, hvor den tilføjer den? Tilføjes den, hvor den er kommet til i HTML'en nu, eller tilføjes den bare oppe i venstre hjørne?
Avatar billede snepnet Nybegynder
19. juli 2004 - 11:32 #5
I det eksempel du har skrevet vil den tilføje den til test (hvad det så end er :o).
I det eksempel jeg har lavet vil den indsætte dem i rækkefølge under dit <form> tag.

Du kan styre det som du har lyst til... Der er kontroller som Panel og PlaceHolder so du kan trække ind på siden (eller indsætte programmatisk), og så kan du smide dine kontroller (som labels mv.) ind i dem.
Avatar billede danisher Nybegynder
19. juli 2004 - 11:37 #6
Hejsa

Jamen det er netop det samme problem. Hele tabellen som de skal smides ind i, bliver dannet dynamisk. Jeg kan derfor ikke smide hverken panels eller lignende ind et sted i tabellen, som ikke er lavet endnu (før runtime)...
Forstår du det, eller...?
Avatar billede snepnet Nybegynder
19. juli 2004 - 11:45 #7
Hvis du bygger dine tabeller dynamisk hele vejen igennem, synes jeg du skal benytte dig at den kontrol der hedder Table.

Du kan gøre noget som det her :

Table tbl = new Table();
TableRow tr = null;
TableCell tc = null;
Button btn = null;
Label lbl = null;

for(int i=0;i<10;i++)
{
    tr = new TableRow();
    for(int j=0;j<5;j++)
    {
        tc = new TableCell();
        btn = new Button();
        btn.Text = "Klik her";
       
        // du kan styre kontrolgenereringen i løkken hvis du vil.
        if(someCondition)
        {
            lbl = new Label();
            lbl.Text = "Se... en knap !";
            tc.Controls.Add(lbl);
        }
       
        tc.Controls.Add(btn);
        tr.Cells.Add(tc);
    }
    tbl.Rows.Add(tr);
}

this.Page.Controls[1].Controls.Add(tbl);
Avatar billede snepnet Nybegynder
19. juli 2004 - 11:46 #8
Kan du se fidusen ?
Avatar billede danisher Nybegynder
19. juli 2004 - 11:51 #9
Hejsa, ja det ser jo skide godt ud.

Jeg prøver mig lige frem. Kan man ikke også tilføje en radio til tabellen?

Takker!
Avatar billede snepnet Nybegynder
19. juli 2004 - 11:55 #10
Du kan tilføje alt hvad du har lyst til.... Bare gå til den :o)
Avatar billede danisher Nybegynder
19. juli 2004 - 12:24 #11
Kan jeg så tilgå disse labels på et senere tidspunkt? F.eks. når en bruger trykker på send, og det skal behandles i:
private void Button1_Click(object sender, System.EventArgs e)

?
Avatar billede snepnet Nybegynder
19. juli 2004 - 12:47 #12
Jeps.
Er det en knap der skal sidde på hver række ?
(hvis det er tilfældet kan du udnytte CommandName, og CommandArgument på knappen til at angive ting og sager så du kan "lave det rigtige" i din handler).
Avatar billede danisher Nybegynder
19. juli 2004 - 13:12 #13
Ok, kan du eventuelt give mig et eksempel? Jeg er ikke lige helt med...
Takker!
Avatar billede snepnet Nybegynder
19. juli 2004 - 13:29 #14
Ja det kan jeg da... Jeg fletter det ind i den fra før :

// en eller anden metode til den slags :o)
private void SomeMethod(string commandArgument)
{
    Table tbl = new Table();
    TableRow tr = null;
    TableCell tc = null;
    Button btn = null;
    Label lbl = null;

    for(int i=0;i<10;i++)
    {
        tr = new TableRow();
        for(int j=0;j<5;j++)
        {
            tc = new TableCell();
            btn = new Button();
            btn.Text = "Klik her";
                   
            btn.CommandName = ; // NB ! se forklaring længere nede
            btn.CommandArgument = i.ToString();
            btn.Click += new EventHandler(btn_Click);
                   
            lbl = new Label();
            lbl.Text = "Se... en knap !";
            tc.Controls.Add(lbl);
                   
            tc.Controls.Add(btn);
            tr.Cells.Add(tc);
        }
        tbl.Rows.Add(tr);
    }
    this.Page.Controls[1].Controls.Add(tbl);
}

Og så har handleren sådan her :
private void btn_Click(object sender, EventArgs e)
{
    Button button = (Button)sender;
    int argument = int.Parse(button.CommandArgument);
    switch(button.CommandName)
    {
        case "fester" :
            DoSomethingCrazy(argument);
            break;
        case "bester" :
            DoSomethingFunny(argument);
            break;
        case "test" :
            DoSomethingIdiotic(argument);
            break;
        default:
            break;
    }
}

Håber du er med på den... Ellers må du sige til.

// Jeg ved ikke om det kan bygge... jeg har bare skrevet det herude.

Mvh.
Avatar billede danisher Nybegynder
19. juli 2004 - 14:42 #15
Yeps, jeg er med.

Nu skal jeg bare bruge radio buttons i stedet. Og det driller lidt.

while (oleDbReader2.Read())
{
    rl.Items.Add(new ListItem("",oleDbReader2["points"].ToString()));
    tc = new TableCell();
    tc.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
    //Her vil jeg så gerne tilføje en enkelt radio button med værdien som vist ovenfor
    tc.Style.Add("border-left", "1px dashed #999999");
    tr.Cells.Add(tc);
}

Jeg prøvede at bruge RadioButton i stedet for RadioButtonList, men der kunne jeg ikke få den til at gruppere radio knapperne. Den sagde at der var flere der havde samme ID. Jeg satte ID'et, fordi det var den eneste der havde indflydelse på radio'en value.

Er det noget du kan hjælpe med?

Er du eventuelt på messenger?

På forhånd tak!
Avatar billede danisher Nybegynder
19. juli 2004 - 15:10 #16
Jeg har fået tilføjet min radio buttons:

while (oleDbReader2.Read())
{
    rb = new RadioButton();
    rb.ID = counter.ToString();
    rb.GroupName = oleDbReader1["question"].ToString();
    tc = new TableCell();
    tc.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
    tc.Style.Add("border-left", "1px dashed #999999");
    tc.Controls.Add(rb);
    tr.Cells.Add(tc);
    counter++;
}

Men nu skal jeg så have fat i de radio buttons i funktionen:
private void Button1_Click(object sender, System.EventArgs e)

Hvordan gør jeg det?
Avatar billede snepnet Nybegynder
19. juli 2004 - 15:27 #17
Du kan altid søge igennem tabellen f.eks.

foreach(TableRow tr in table.Rows)
{
  RadioButton rdo = ((RadioButton)tr.FindControl(<forventet id>);
}
Avatar billede snepnet Nybegynder
19. juli 2004 - 15:28 #18
Er det bare en knap på siden der ligger uden for tabellen du har tilknyttet den der handler til ?
Avatar billede danisher Nybegynder
19. juli 2004 - 15:30 #19
Ja, det er det.

<form id="Form1" method="post" runat="server">
    <asp:label id="Label3" runat="server" Font-Bold="True"></asp:label>&nbsp;
    <asp:Label id="Label4" runat="server" ForeColor="Red" Visible="False"></asp:Label><BR>
    <span id="strategi" runat="server"></span>
    <BR>
    <asp:label id="Label2" runat="server" Font-Bold="True"></asp:label><BR>
    <asp:Panel id="Panel1" runat="server" HorizontalAlign="Left"></asp:Panel>
    <BR>
    <BR>
    <asp:Button id="Button1" runat="server" Text="Videre"></asp:Button>
</form>
Avatar billede danisher Nybegynder
19. juli 2004 - 15:39 #20
Hmm.. Jeg får en fejl:
"Specified cast is not valid."
Line 187: RadioButton rdo = ((RadioButton)tr.FindControl("Omsætning"));

Det her skulle jeg gerne få til at virke:

Table tbl = (Table) Panel1.Controls[0];
foreach(TableRow tr in tbl.Rows)
{
    RadioButton rdo = ((RadioButton)tr.FindControl("Omsætning"));
    if (!rdo.Checked)
    tr.FindControl("Omsætning").Visible = true;
}

:D
Avatar billede snepnet Nybegynder
19. juli 2004 - 16:36 #21
Sætter du ID på din radiobutton til "Omsætning" ?
Avatar billede danisher Nybegynder
19. juli 2004 - 16:48 #22
Hmm.. Ikke mere :)

Problemet at jeg ikke kender det ID på forhånd. Det er altså et id, som kommer fra databasen, så jeg bliver vel nødt til at løbe databasen igennem igen, for at få det korrekte ID ud...

Kan du hjælpe?
Avatar billede snepnet Nybegynder
19. juli 2004 - 16:54 #23
Hmmm.... Du kan jo altid gøre sådan her :

        private void InsertTable()
        {
            tbl = new Table();
            TableRow tr = null;
            TableCell tc = null;
            Button btn = null;
            Label lbl = null;
            RadioButton rdo = null;

            for(int i=0;i<10;i++)
            {
                tr = new TableRow();
                for(int j=0;j<5;j++)
                {
                    rdo = new RadioButton();
                    rdo.ID = "RDO_" + i.ToString() + "_" + j.ToString();

                    tc = new TableCell();
                    btn = new Button();
                    btn.Text = "Klik her";
                   
                    btn.CommandName = "fester"; // NB ! se forklaring længere nede
                    btn.CommandArgument = i.ToString();
                    btn.Click += new EventHandler(btn_Click);
                   
                    lbl = new Label();
                    lbl.Text = "Se... en knap !";
                   
                    tc.Controls.Add(lbl);                   
                    tc.Controls.Add(btn);
                    tc.Controls.Add(rdo);
                    tr.Cells.Add(tc);
                }
                tbl.Rows.Add(tr);
            }
            this.Page.Controls[1].Controls.Add(tbl);
        }


Og handler :

        private void Button1_Click(object sender, System.EventArgs e)
        {
            int rowIndex = 0;
            string rdoId = null;
            foreach(TableRow tr in this.tbl.Rows)
            {
                // kigger bare på én af dem lige nu.
                rdoId = "RDO_"+(rowIndex++).ToString() + "_2";
                RadioButton rdb = (RadioButton)tr.FindControl(rdoId);
                bool isChecked = rdb.Checked;
                Response.Write(rdoId + " Checked : " + isChecked.ToString() +"<br>");
            }   
        }
Avatar billede snepnet Nybegynder
19. juli 2004 - 16:55 #24
(Jeg har smidt det ind i et projekt i vs nu, så det skulle bygge :o)
Avatar billede snepnet Nybegynder
19. juli 2004 - 16:57 #25
Men... noget helt.

Du skulle prøve at tage et lille kig på et datagrid.... Det kan fikse den slags plumming for dig uden de store ballader.
Hvis det alligevel er data du populerer fra en database er det som skabt til det :o)
Avatar billede snepnet Nybegynder
19. juli 2004 - 16:59 #26
Du kan sagtens for sådan noget som det her til at virke helt fint, men et datagrid giver en rigtig stor hånd med på vejen.
Avatar billede danisher Nybegynder
19. juli 2004 - 17:01 #27
Ok, jeg takker! Har sgu fundet ud af meget.

Smid lige et svar
Avatar billede snepnet Nybegynder
19. juli 2004 - 17:04 #28
Super :o)
Jeg håber det kommer til at fungere som det skal.

Mvh
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