You can follow these steps:
1.Create GridView in ASPX Page
<asp:gridview id="GridView1" runat="server" autogeneratecolumns="false" xmlns:asp="#unknown">
AllowSorting="True">
<columns>
<asp:templatefield headertext="SNO">
<edititemtemplate>
<asp:textbox id="txtSNO" runat="server" text="<%# Bind("SNO") %>"></asp:textbox>
</edititemtemplate>
<itemtemplate>
<asp:label id="lblSNO" runat="server" text="<%# Bind("SNO") %>"></asp:label>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Name">
<edititemtemplate>
<asp:textbox id="txtName" runat="server" text="<%# Bind("Name") %>"></asp:textbox>
</edititemtemplate>
<itemtemplate>
<asp:label id="lblName" runat="server" text="<%# Bind("Name") %>"></asp:label>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Age">
<edititemtemplate>
<asp:textbox id="txtAge" runat="server" text="<%# Bind("Age") %>"></asp:textbox>
</edititemtemplate>
<itemtemplate>
<asp:label id="lblAge" runat="server" text="<%# Bind("Age") %>"></asp:label>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Address">
<edititemtemplate>
<asp:textbox id="txtAddress" runat="server" text="<%# Bind("Address") %>"></asp:textbox>
</edititemtemplate>
<itemtemplate>
<asp:label id="lblAddress" runat="server" text="<%# Bind("Address") %>"></asp:label>
</itemtemplate>
</asp:templatefield>
</columns>
<selectedrowstyle forecolor="#CCFF99" font-bold="True">
BackColor="#009999"></selectedrowstyle>
<rowstyle forecolor="#003399" backcolor="White"></rowstyle>
</asp:gridview>
2.Create Buttons in ASPX Page
<asp:button id="btnAddNewRow" runat="server" text="AddNewRow" onclick="BtnAddNewRowClick" xmlns:asp="#unknown" />
<asp:button id="btnInsert" runat="server" text="Insert" onclick="BtnInsertClick" xmlns:asp="#unknown" />
3.Define your DataType
it should be Serializable
[Serializable]
internal class Sample
{
public static Sample CreateTestSample(int i)
{
return new Sample
{
SNO = "SNO " + i,
Address = "Address " + i,
Age = i,
Name = "Name " + i,
City = "City " + i
};
}
public string SNO { get; set; }
public string Name { get; set; }
public string City { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
4.Define Persistent Object
private List<sample> DataSamples
{
get { return ViewState["Samples"] as List<sample>; }
set { ViewState["Samples"] = value; }
}
5.Initialize GridView control
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FillGrid();
}
}
6.Fill GridView control
private void FillGrid()
{
DataSamples = CreateDataSamples();
GridView1.DataSource =DataSamples ;
GridView1.DataBind();
}
private List<sample> CreateDataSamples()
{
var list = new List<sample>();
for (int i = 0; i < 10; i++)
list.Add(Sample.CreateTestSample(i));
return list;
}
7.Define your AddNewRow Action
protected void BtnAddNewRowClick(object sender, EventArgs e)
{
var list = CreateDataSamples();
list.Add(new Sample());
GridView1.EditIndex = list.Count - 1;
GridView1.DataSource = DataSamples;
GridView1.DataBind();
}
8.Define your Insert Action
protected void BtnInsertClick(object sender, EventArgs e)
{
var row = GridView1.Rows[GridView1.EditIndex];
var sno = ((TextBox) (row.FindControl("txtSNO"))).Text;
var name = ((TextBox) (row.FindControl("txtName"))).Text;
var age = Convert.ToInt32(((TextBox) (row.FindControl("txtAge"))).Text);
var address = ((TextBox) (row.FindControl("txtAddress"))).Text;
var newSample = new Sample
{
SNO = sno,
Name = name,
Age = age,
Address = address
};
if (GridView1.EditIndex > 0)
DataSamples[GridView1.EditIndex] = newSample;
GridView1.EditIndex = -1;
GridView1.DataSource = DataSamples;
GridView1.DataBind();
}
please let me know if you need anymore details.