Good Day to All.
When i came across one issue ie: while creating a dynamic control ie: Dropdownlist on my case , if i choose some value on Dropdownlist onClick of the button i want the selected value that has to be stored in Database. But on postback the Control is not visible.
so here i am going discuss how to create a dynamic control , onpostback how to retain its value. its just simple ie: Re-Create the Dynamic Control OnPostback so it will retain the selectedvalue.
HTML Code
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns ="True" OnRowDataBound="GridView1_RowDataBound">
<Columns >
<asp:TemplateField >
<ItemTemplate >
<table >
<tr>
<td>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</td>
<br />
<td>
<asp:PlaceHolder ID="PlaceHolder2" runat="server"></asp:PlaceHolder>
</td>
<br />
<td>
<asp:PlaceHolder ID="PlaceHolder3" runat="server"></asp:PlaceHolder>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="Get Value" OnClick="Button1_Click" />
So here in Gridview i am going to create a dynamic control on page_Load.
so i am placing the Placeholder to hold the Control. Its a Container for that controls.
Code-Behind
private void BindArraylist()
{
List<string> bindG = new List<string>() ;
bindG .Add ("Mani");
bindG .Add ("Shivaram");
bindG .Add ("Gopi");
bindG.Add ("Venu");
GridView1 .DataSource = bindG ;
GridView1 .DataBind ();
}
//page_OnLoad
if (!Page.IsPostBack)
{
BindArraylist();
}
//On Row databound we are creation a dynamic dropdownlist, by adding some items and added to the Placholder Container
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
PlaceHolder p1 = new PlaceHolder();
PlaceHolder p2 = new PlaceHolder();
PlaceHolder p3 = new PlaceHolder();
p1 = (PlaceHolder)e.Row.FindControl("PlaceHolder1");
p2 = (PlaceHolder)e.Row.FindControl("PlaceHolder2");
p3 = (PlaceHolder)e.Row.FindControl("PlaceHolder3");
DropDownList d1 = new DropDownList();
DropDownList d2 = new DropDownList();
DropDownList d3 = new DropDownList();
d1.ID = "d1";
d1.Items.Add("123");
d1.Items.Add("00");
d1.Items.Add("dfgdf");
d2.ID = "d2";
d2.Items.Add("34f");
d2.Items.Add("h456");
d2.Items.Add("ngfy3e35");
d3.ID = "d3";
d3.Items.Add("3478");
d3.Items.Add("0fghdj0");
d3.Items.Add("2d43g5gh5");
p1.Controls.Add(d1);
p2.Controls.Add(d2);
p3.Controls.Add(d3);
}
}
Write the code onButton_Click to get the selected value, before that i am calling the bindArraylist method again to re-Create dropdownlist control.
protected void Button1_Click(object sender, EventArgs e)
{
BindArraylist();
foreach (GridViewRow row in GridView1.Rows)
{
DropDownList d1 = new DropDownList();
DropDownList d2 = new DropDownList();
DropDownList d3 = new DropDownList();
d1 = (DropDownList)row.FindControl("d1");
d2 = (DropDownList)row.FindControl("d2");
d3 = (DropDownList)row.FindControl("d3");
//txtValues.Add(d1.SelectedIndex.ToString());
Response.Write(d1.SelectedValue.ToString() + "-" + d2.SelectedValue.ToString() + "-" + d3.SelectedValue.ToString());
}
}