Thursday, July 30, 2009

How to get the value of Textbox which is created at runtime in asp.net?

In my asp.net page i have created textbox control when i click a button. and then i hve entered some values into that textbox. now i want to get the value of that textbox when i click another one button. Any one pls tell me how to get ?

How to get the value of Textbox which is created at runtime in asp.net?
Dynamically added controls have no object reference variable in the codebehind class. They appear only in the control collection of the containing control, i.e. the Page.Controls collection. When the page is posted back to the server as a result of user interaction a new instance of the codebehind class is instantiated, and all the variables of the class is set with values from the ViewState.





This means that the objects we are accessing from the codebehind class, that "feels" like the same objects as we worked on before postback, actually are new ones that got their predecessors values via ViewState and ASP.NET state management.





So, the controls that were dynamically created are no longer there and consequently the values returned from these controls have no place to go. They are lost in the viewstate.





In order to catch these values the dynamically generated controls needs to be re-generated at Page_Load. The important thing is to assign the same ID to each control. The ViewState uses the ID property of the Control objects to reinstate the values.





Add the following elements to your System.UI.Page class:





Collapse


public class DynamicallyAddingControls : System.Web.UI.Page


{


// a Property that manages a counter stored in ViewState


protected int NumberOfControls


{


get{return (int)ViewState["NumControls"];}


set{ViewState["NumControls"] = value;}


}





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


{


if(!Page.IsPostBack)


//Initiate the counter of dynamically added controls


this.NumberOfControls = 0;


else


//Controls must be repeatedly be created on postback


this.createControls();


}





// This routine creates the controls and assigns a generic ID


private void createControls()


{


int count = this.NumberOfControls;





for(int i = 0; i %26lt; count; i++)


{


TextBox tx = new TextBox();


tx.ID = "ControlID_" + i.ToString();


//Add the Controls to the container of your choice


Page.Controls.Add(tx);


}


}





// example of dynamic addition of controls


// note the use of the ViewState variable


private void addSomeControl()


{


TextBox tx = new TextBox();


tx.ID = "ControlID_" + NumberOfControls.ToString();





Page.Controls.Add(tx);


this.NumberOfControls++;


}





}








Note that the createControls method has to simulate the way that you dynamically built your page before the postback. The important thing here is obviously to assign identical ID values to the correct type of controls to that we can access them at postback.


No comments:

Post a Comment