ASP.NET putting dynamic controls on page in reverse messes up events

Posted by Jimmy Geels on Stack Overflow See other posts from Stack Overflow or by Jimmy Geels
Published on 2009-09-16T07:21:59Z Indexed on 2010/03/08 6:06 UTC
Read the original article Hit count: 416

Filed under:
|
|
|
|

I have this weird problem when putting textboxes on the page in reverse. The whole event system is messed up. Changing one textbox fires TextChange on all textboxes. I can fix this by putting the controls in a list first and then call add while iterating trough the list in reverse. But i just want to know why this fails. Heres some code (.net 2.0)

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        InitFields();
    }

    private void InitFields()
    {
        int nrFields;
        //We have a static textbox called nrElements, this determines the number
        //of fields to initialize
        if (int.TryParse(nrElements.Text, out nrFields))
        {
            //Put all the dynamic fields on the screen in reverse order
            foreach(Control t in GetDynamicFields(nrFields))
            {
                //Calling Controls.Add works fine
                //Calling Controls.AddAt messes up the events
                //Try changing different textboxes
                plhFields.Controls.AddAt(0, t);
            }
        }
    }

    private IEnumerable<Control> GetDynamicFields(int nrFields)
    {
        for (int i = 0; i < nrFields; i++)
        {
            TextBox txtBox = new TextBox();
            txtBox.ID = string.Format("dynTextBox{0}", i.ToString());
            txtBox.AutoPostBack = true;
            txtBox.TextChanged += t_TextChanged;
            yield return txtBox;
        }
    }

    private void t_TextChanged(object sender, EventArgs e)
    {
        TextBox txtBox = sender as TextBox;
        if (txtBox != null)
            txtBox.Text = txtBox.Text + "Changed ";
    }
}

© Stack Overflow or respective owner

Related posts about ASP.NET

Related posts about c#