Dear,
Gridview Autogenerated Column Using RowDatabound For Edit time change Textbox to DropdownList. But when Change Dropdownlist value and Check Dropdownlist Control but not available how to stay inside cell when Add Controls.
in Update time Dropdownlist control not Detected.
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server">
<div class="container">
<div class="row">
<div class="col-md-2">
<div class="spacer">
<asp:LinkButton runat="server" CssClass="btn btn-danger" ID="lnkLoad" OnClick="lnkLoad_Click">Load</asp:LinkButton>
</div>
</div>
<div class="col-md-10">
<asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="true" OnRowDataBound="OnRowDataBound"
CssClass="table table-hover table-bordered" EmptyDataText="No Items Available"
OnRowEditing="OnRowEditing">
<Columns>
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="OnUpdate"><span class="fa fa-check-square-o"></span></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" OnClick="OnCancel"><span class="fa fa-window-close"></span></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="LinkButton3" runat="server" CommandName="Edit"><span class="fa fa-pencil-square-o"></span></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</div>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
protected void Page_Load(object sender, EventArgs e)
{
if (!this.Page.IsPostBack)
{
try
{
this.BindGrid();
}
catch (Exception ex)
{
string message = "alert('" + ex.Message.ToString() + "');";
ScriptManager.RegisterStartupScript(sender as Control, this.GetType(), "alert", message, true);
}
}
}
protected void BindGrid()
{
this.GridView1.DataSource = (DataTable)Session["GridView1"];
this.GridView1.DataBind();
}
private DropDownList TypesCombobox()
{
DropDownList DownList = new DropDownList();
DownList.Items.Add(new ListItem("TextBox", "TextBox"));
DownList.Items.Add(new ListItem("ComBobox", "Combobox"));
return DownList;
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView drv = (DataRowView)e.Row.DataItem;
if (drv.Row.Table.Columns.Contains("Type") && this.GridView1.EditIndex == e.Row.RowIndex)
{
string TypeValue = drv["Type"].ToString();
int index = drv.Row.Table.Columns["Type"].Ordinal + 1;
DropDownList dropDownList = this.TypesCombobox();
dropDownList.ID = "ddlTypesControl" + drv.Row.Table.Columns["Type"].Ordinal.ToString();
TableCell CellItem = e.Row.Cells[index] as TableCell;
if (!string.IsNullOrEmpty(TypeValue))
{
dropDownList.Items.FindByValue(TypeValue).Selected = true;
}
CellItem.Controls.Remove(CellItem.Controls[0] as TextBox);
CellItem.Controls.Add(dropDownList);
}
}
}
protected void OnRowEditing(object sender, GridViewEditEventArgs e)
{
this.GridView1.EditIndex = e.NewEditIndex;
this.BindGrid();
}
protected void OnUpdate(object sender, EventArgs e)
{
try
{
GridViewRow row = (sender as LinkButton).NamingContainer as GridViewRow;
DataTable dt = (DataTable)Session["GridView1"];
for (int i = 0; i < row.Cells.Count - 1; i++)
{
string values = string.Empty;
if (dt.Columns[i].ToString() != "Type")
{
values = (row.Cells[i + 1].Controls[0] as TextBox).Text;
}
else
{
values = (row.Cells[i + 1].Controls[0] as DropDownList).SelectedValue.ToString(); ;
}
dt.Rows[row.RowIndex][dt.Columns[i]] = values;
}
Session["GridView1"] = dt;
this.GridView1.EditIndex = -1;
this.BindGrid();
}
catch (Exception ex)
{
string message = "alert('" + ex.Message.ToString() + "');";
ScriptManager.RegisterStartupScript(sender as Control, this.GetType(), "alert", message, true);
}
}
protected void OnCancel(object sender, EventArgs e)
{
this.GridView1.EditIndex = -1;
this.BindGrid();
}
protected void lnkLoad_Click(object sender, EventArgs e)
{
this.gettable();
}
private void gettable()
{
try
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Columns.Add(new DataColumn("Type", typeof(string)));
dt.Rows.Add("NameTest1", "TextBox");
dt.Rows.Add("NameTest2", "Combobox");
dt.Rows.Add("NameTest3", "Combobox");
dt.Rows.Add("NameTest4", "TextBox");
dt.Rows.Add("NameTest5", "TextBox");
Session["GridView1"] = dt;
this.BindGrid();
}
catch (Exception ex)
{
string message = "alert('" + ex.Message.ToString() + "');";
ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", message, true);
}
}