Wickasitha's tech Blog

blogging everything

Retrieve value of Dynamic controls in asp.net

The main object of this article is to access value of  asp.net controls which are generated dynamically. For this, we will save viewstate of dynamic controls.
Suppose we have one dropdown and one button. When user selects “Generate” option, the Dynamic table will be generated. In each cell of table there will be textbox. User enters value in the textboxes and click on button then it will display all user entered values.

In aspx page:

<form id="form1" runat="server">
<div>
<asp:Table ID="tbl" runat="server">
</asp:Table>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
onselectedindexchanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem>Select...</asp:ListItem>
<asp:ListItem>Generate</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="btnSet" runat="server" Text="Button" onclick="btnSet_Click" /> </div>
</form>

To create dynamic control:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
if (DropDownList1.SelectedIndex == 1)
{
CreateDynamicTable();
}
}
private void CreateDynamicTable()
{
// Fetch the number of Rows and Columns for the table
// using the properties
int tblRows = 5;
int tblCols = 5;
// Now iterate through the table and add your controls
for (int i = 0; i < tblRows; i++)
{
TableRow tr = new TableRow();
for (int j = 0; j < tblCols; j++)
{
TableCell tc = new TableCell();
TextBox txtBox = new TextBox();
txtBox.ID = "txt-" + i.ToString() + "-" + j.ToString();
txtBox.Text = "RowNo:" + i + " " + "ColumnNo:" + " " + j;
// Add the control to the TableCell
tc.Controls.Add(txtBox);
// Add the TableCell to the TableRow
tr.Cells.Add(tc);
}
// Add the TableRow to the Table
tbl.Rows.Add(tr);
tbl.EnableViewState = true;
ViewState["tbl"] = true;
}
}
On Button click:
protected void btnSet_Click(object sender, EventArgs e)
{
foreach (TableRow tr in tbl.Controls )
{
foreach (TableCell tc in tr.Controls)
{
if (tc.Controls[0] is TextBox)
{
Response.Write(((TextBox)tc.Controls[0]).Text);
}
}
Response.Write("<br/>");
}
}

Right Now, No output because dynamic controls are lost in postback .So we need to save dynamic controls value and generate dynamic controls again.we need to maintain viewstate.

protected override object SaveViewState()
{
object[] newViewState = new object[2];
List<string> txtValues = new List<string>();
foreach (TableRow row in tbl.Controls)
{
foreach (TableCell cell in row.Controls)
{
if (cell.Controls[0] is TextBox)
{
txtValues.Add(((TextBox)cell.Controls[0]).Text);
}
}
}
newViewState[0] = txtValues.ToArray();
newViewState[1] = base.SaveViewState();
return newViewState;
}
protected override void LoadViewState(object savedState)
{
//if we can identify the custom view state as defined in the override for SaveViewState
if (savedState is object[] && ((object[])savedState).Length == 2 && ((object[])savedState)[0] is string[] )
{
object[] newViewState = (object[])savedState;
string[] txtValues = (string[])(newViewState[0]);
if (txtValues.Length > 0)
{
//re-load tables
CreateDynamicTable();
int i = 0;
foreach (TableRow row in tbl.Controls)
{
foreach (TableCell cell in row.Controls)
{
if (cell.Controls[0] is TextBox && i < txtValues.Length)
{
((TextBox)cell.Controls[0]).Text = txtValues[i++].ToString();
}
}
}
}
//load the ViewState normally
base.LoadViewState(newViewState[1]);
}
else
{
base.LoadViewState(savedState);
}
}

Canceling an async postback – ASP.NET AJAX

  • Tuesday May 11,2010 12:38 AM
  • By wickasitha
  • In AJAX, ASP.NET

Recently a new requirement came for cancel an async operation.  Being aware of the abortPostBack method the PageRequestManager, I figured that it would be pretty simple to implement this feature.  I added a ‘Cancel’ button to my progress indicator and wired the onclick handler to invoke the abortPostBack method.

Clicking cancel did abort the async postback however, because the OnUpdated animation only runs when the UpdatePanel is updated my indicator was never being hidden and it was appearing as if the application was hanging.   My approach to solving this was to look-up the animation component and invoke the animation myself.  like this:

 function abort(){
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        if(prm get_isInAsyncPostBack()){
            //  abort the postback
            prm abortPostBack();
            //  get the reference to the animation for the gridview
            var animation = $find('animation');
            //  simulate stopping by replaying the animation
            animation._postBackPending = false;
            animation.get_OnUpdatingBehavior().quit();
            animation.get_OnUpdatedBehavior().play();
        }
    }
SOURCE
 (more...)

Solution for Master Page Image Display Problem in Asp.net

Master Page Image Display Problem and Solution in Asp.net

Master Page is creating problem when a page inside folder is trying to refer master page. The reason of problem is Master Page is using absolute image url, which changes when you try to refer same inside folder.


problem

A simple solution to problem is to define relative path for images inside master page.

So if you have coded like following in your MasterPage File

<img src=”Images/Logo.gif”/>
Than Replace it with,

<img src=”<%= Page.ResolveUrl(“~“)%>Images/Logo.gif”/>

 

Also you can solved this problem by doing this:

<img src=”~/images/logo.gif” runat=”server” />
kick it on DotNetKicks.com

RSS Feeds

QR Code

qr code

QR code created by QR code Widget

Fun with .NET

Visitors

Your Ads Here
Promote your products