Accessing controls created dynamically (c#)

In my code behind (c#) I dynamically created some RadioButtonLists with more RadioButtons in each of them. I put all controls to a specific Panel.
What I need to know is how to access those controls later as they are not created in .aspx file (with drag and drop from toolbox)?

I tried this:

    foreach (Control child in panel.Controls)
    {
        Response.Write("test1");
        if (child.GetType().ToString().Equals("System.Web.UI.WebControls.RadioButtonList"))
        {
            RadioButtonList r = (RadioButtonList)child;
            Response.Write("test2");
        }   
    }

“test1” and “test2” dont show up in my page. That means something is wrong with this logic.
Any suggestions what could I do?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You must recreate your controls after each postback.

ASP.NET is stateless, that is, when you postback a page to the server, your dynamically created controls won’t be part of the page anymore.

Last week I had to overcome this situation once more.

What did I do?
I saved the data that I used to create the controls inside Session object. On PageLoad method I passed that same data to recreate the dynamic controls.

What I suggest is:
Write a method to create the dynamic controls.

On PageLoad method check to see if it’s a postback…

if(Page.IsPostBack)
{
   // Recreate your controls here.
}

A really important thing: assign unique IDs to your dynamically created controls so that ASP.NET can recreate the controls binding their existing event handlers, restoring their ViewState, etc.
myControl.ID = "myId";

I had a hard time to learn how this thing works. Once you learn you have power in your hands. Dynamically created controls open up a new world of possibilities.

As Frank mentioned: you can use the “is” keyword this way to facilitate your life…

if(child is RadioButtonList)

Note:
it’s worth to mention the ASP.NET Page Life Cycle Overview page on MSDN for further reference.

Method 2

When are you doing this in your code? Be sure you do this at the right time in the ASP life cycle or your controls don’t exist yet: http://msdn.microsoft.com/en-us/library/ms178472.aspx

Method 3

I don’t think creating controls in the PageLoad is the right away of doing, first the asp.net life cycle goes from Initialization;Load ViewState Data;Load PostData; Object Load etc.

if you create controls at the Page_Load you’ll lose the ViewState, events etc.

The right away is doing at PageInit, or if is a control (OnInit).

The next difficult is that at PageInit, you don’t have the ViewState Available, if you need to reconstruct the number of objects you need to store some context/info in a hidden field ant then retrieve that information at PageInit, Create the objects and voila!

Example:

imagine that you need to create 1..N TextBoxes, you create html hidden field (not with runat=server) e.g. NumberOfTextBoxes.

When you are executing PageInit Code: you retrieve the value e.g. numberOfTextBoxes = Request.Form[“NumberOfTextBoxes”], then you create the TextBoxes.

Remember the most important thing is to match the number and the order of existent Controls stored the ViewState.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x