Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding new eventHandler in RadioButton CheckedChanges in dynamic table

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".

like image 219
WISEMAN Avatar asked Nov 14 '22 13:11

WISEMAN


1 Answers

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.

like image 92
Ryan Alford Avatar answered Dec 18 '22 21:12

Ryan Alford