If you have solved your problem then share your code and mark it as answer. Also refer the below code if you have not solved yet.
TemplateGenerator.cs class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
/// <summary>
/// Summary description for TemplateGenerator
/// </summary>
public class TemplateGenerator : ITemplate
{
ListItemType type;
string columnName;
int index;
public TemplateGenerator(ListItemType t, string cN, int id)
{
type = t;
columnName = cN;
index = id;
}
// Override InstantiateIn() method
void ITemplate.InstantiateIn(System.Web.UI.Control container)
{
switch (type)
{
case ListItemType.EditItem:
TextBox txt = new TextBox();
txt.ID = "txtmark" + index;
txt.Width = Unit.Pixel(30);
txt.DataBinding += new EventHandler(txt_DataBinding);
container.Controls.Add(txt);
break;
case ListItemType.Item:
Label lbl = new Label();
lbl.DataBinding += new EventHandler(lbl_DataBinding);
container.Controls.Add(lbl);
break;
}
}
private void lbl_DataBinding(object sender, EventArgs e)
{
Label lbl = (Label)sender;
GridViewRow container = (GridViewRow)lbl.NamingContainer;
object bindValue = DataBinder.Eval(container.DataItem, columnName);
// Adding check in case Column allows null values
if (bindValue != DBNull.Value)
{
lbl.Text = bindValue.ToString();
}
}
private void txt_DataBinding(object sender, EventArgs e)
{
TextBox txt = (TextBox)sender;
GridViewRow container = (GridViewRow)txt.NamingContainer;
object bindValue = DataBinder.Eval(container.DataItem, columnName);
// Adding check in case Column allows null values
if (bindValue != DBNull.Value)
{
txt.Text = bindValue.ToString();
}
}
}
HTML
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" AutoGenerateEditButton="true" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit" >
</asp:GridView>
</div>
</form>
</body>
</html>
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
GetFromKey();
BindGrid();
}
}
private void GetFromKey()
{
List<string> keys = Request.Form.AllKeys.Where(key => key.Contains("txtmark")).ToList();
int i = 1;
foreach (string key in keys)
{
// call your Add TemplateField code
AddDynamicTemplateField(i);
i++;
}
if (keys.Count == 0)
{
AddDynamicTemplateField(i);
}
}
protected void Page_PreInit(object sender, EventArgs e)
{
GetFromKey();
}
private void BindGrid()
{
if (ViewState["Mark"] == null)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[1] { new DataColumn("mark", typeof(string)) });
dt.Rows.Add("10");
dt.Rows.Add("20");
ViewState["Mark"] = dt;
}
GetFromKey();
GridView1.DataSource = (DataTable)ViewState["Mark"];
GridView1.DataBind();
}
private void AddDynamicTemplateField(int i)
{
TemplateField field = new TemplateField();
field.HeaderText = "Mark";
field.ItemTemplate = new TemplateGenerator(ListItemType.Item, "mark", i);
field.EditItemTemplate = new TemplateGenerator(ListItemType.EditItem, "mark", i);
bool isColumExist = false;
for (int j = 0; j < GridView1.Columns.Count; j++)
{
if (GridView1.Columns[j].ToString() == field.HeaderText)
{
isColumExist = true;
}
}
if (!isColumExist)
{
GridView1.Columns.Add(field);
}
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
BindGrid();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
TextBox txt = GridView1.Rows[e.RowIndex].FindControl("txtmark1") as TextBox;
GridView1.EditIndex = -1;
DataTable dt = new DataTable();
dt = (DataTable)ViewState["Mark"];
dt.Rows[e.RowIndex]["mark"] = txt.Text;
ViewState["Mark"] = dt;
BindGrid();
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
BindGrid();
}
Screenshot
