Sometimes you may require to create controls dynamically in ASP.NET. Because of the ASP.NET page life cycle, you may loss the created controls on next post back (ASP.NET framework recreate the page on postback). You can resolve this issue by overriding
LoadViewState()
and
SaveViewState()
methods.
LoadViewState()
method restores view-state information from a previous page request that was saved by the
SaveViewState
method. This method will not executed on the first time.
SaveViewState()
method saves any server control view-state changes that have occurred since the time the page was posted back to the server. So in
SaveViewState()
method, store the values you wish to create. And in the
LoadViewState()
method, retrieve from the viewstate, which returned from
SaveViewState()
method.
Here is a sample implementation, in this text boxes are created based on the drop down list selection. In the
SaveViewState()
method, the value of the drop down list stored to the view state, and in the
LoadViewState()
, controls are recreated using the viewstate information.
Collapse |
Copy Code
private void CreateDynamicControls(int count)
{
for (int i = 0; i < count; i++)
{
var textBox = new TextBox();
var textboxCell = new TableCell();
var tableRow = new TableRow();
tableRow.Cells.Add(textboxCell);
textboxCell.Controls.Add(textBox);
tblRecipients.Rows.Add(tableRow);
}
}
protected override object SaveViewState()
{
var viewState = new object[2];
viewState[0] = int.Parse(ddlRecipients.SelectedValue); ;
viewState[1] = base.SaveViewState();
return viewState;
}
protected override void LoadViewState(object savedState)
{
if (savedState is object[] && ((object[])savedState).Length == 2)
{
var viewState = (object[])savedState;
var count = int.Parse(viewState[0].ToString());
CreateDynamicControls(count);
base.LoadViewState(viewState[1]);
}
else
{
base.LoadViewState(savedState);
}
}
protected void cmdSubmit_Click(object sender, EventArgs e)
{
foreach (TableRow row in tblRecipients.Rows)
{
var textbox = row.Cells[0].Controls[0] as TextBox;
}
}
Happy Programming .
You can find more information about
LoadViewState()
method and
SaveViewState()
method from MSDN.
No comments:
Post a Comment