Adding new eventHandler in RadioButton CheckedChanges in dynamic table

10,102

If I am not mistaken, with dynamic controls in ASP.Net, you need to "rewire" their events on a postback. Remember that on a postback, dynamic controls are no longer there. You have to recreate them.

Share:
10,102
WISEMAN
Author by

WISEMAN

Updated on June 04, 2022

Comments

  • WISEMAN
    WISEMAN about 2 years

    I'm trying to add another eventHandler to RadioButton. This is the sample code (which is working):

    ASP.NET:

    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
    <asp:Button ID="Button1" runat="server" Text="Button" />
    

    C#:

    protected void Page_Load(object sender, EventArgs e)
    {
        RadioButton RB1 = new RadioButton();
        RB1.ID = "1";
        RB1.GroupName = "bla";
        RB1.CheckedChanged += new EventHandler(CheckedChanged);
        RadioButton RB2 = new RadioButton();
        RB2.ID = "2";
        RB2.GroupName = "bla";
        RB2.CheckedChanged += new EventHandler(CheckedChanged);
        PlaceHolder1.Controls.Add(RB1);
        PlaceHolder1.Controls.Add(RB2);
    
    }
    protected void CheckedChanged(object sender, EventArgs e)
    {
        Label1.Text = ((RadioButton)sender).ID;
    }
    

    In my project I have dynamic creating of RadioButtons (the number of rows I get from database). The same adding eventHandler does not work, but if I write

    MyRadioButton.Load += new EventHandler(Another_method);
    

    The Another_method will start, but in

    MyRadioButton.CheckedChanged += new EventHandler(Main_method);
    

    the Main_method will not start if I choose one of the RadioButtons. What is wrong?


    @KevinP This is my code:

        Table tb1 = new Table();
        PlaceHolder1.Controls.Add(tb1);
        TableRow tr = new TableRow();
        TableCell tc = new TableCell();
        //adding the first row with title"
        tr.Cells.Add(tc);
        for (int i = 0; i < ((ArrayList)(result[0])).Count; i++)
        {
            tc = new TableCell();
            Label example = new Label();
            example.Text = ((columnsResultFromSqlClients)(i)).ToString();
            tc.Controls.Add(example);
            tr.Cells.Add(tc);
        }
        tb1.Rows.Add(tr);
        //filling the table
        for (int i = 0; i < result.Count; i++)
        {
            tr = new TableRow();
            tc = new TableCell();
            //adding radio button
            RadioButton RB = new RadioButton();
            RB.Attributes.Add("value", ((ArrayList)(result[i]))[0].ToString());
            RB.GroupName = "for_selecting";
            RB.ID = ((ArrayList)(result[i]))[0].ToString();
            RB.CheckedChanged += new EventHandler(RB_CheckedChanged2);
            //RB.AutoPostBack = true;
    
            RB.Attributes.Add("AutoPostBack", "True");
            tc.Controls.Add(RB);
            tr.Cells.Add(tc);
            //adding content
            for (int j = 0; j < ((ArrayList)(result[i])).Count; j++)
            {
                tc = new TableCell();
                Label example = new Label();
                example.Text = ((ArrayList)(result[i]))[j].ToString();
                tc.Controls.Add(example);
                tr.Cells.Add(tc);
            }
            tb1.Rows.Add(tr);
        }
    

    If I use RB.AutoPostBack = true;, I have no time to press the button to submit my choice, cause the page will reload when i click the one of the Radio Buttons. Also the RB_CheckedChanged2 code:

    protected void RB_CheckedChanged2(object sender, EventArgs e)
    {
        RadioButton tempRB = (RadioButton)sender;
        if (tempRB.Checked)
        {
            selected_id = tempRB.ID;
        }
    }
    

    The select_id is a static int varible with standart value = "-1".