Hi rakeshkuma,
Check this example. Now please take its reference and correct your code.
HTML
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" ShowFooter="true" OnRowEditing="OnRowEditing">
<Columns>
<asp:TemplateField HeaderText="Id">
<ItemTemplate>
<asp:Label ID="lblId" runat="server" Text='<%# Eval("Id") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="lblId" runat="server" Text='<%# Eval("Id") %>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtName" runat="server" Text='<%# Eval("Name") %>' />
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtName" runat="server" Text="" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Country">
<ItemTemplate>
<asp:Label ID="lblCountry" runat="server" Text='<%# Eval("Country") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCountry" runat="server" Text='<%# Eval("Country") %>' />
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtCountry" runat="server" Text="" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Action">
<ItemTemplate>
<asp:LinkButton Text="Edit" runat="server" CommandName="Edit" />
<asp:LinkButton Text="Delete" runat="server" OnClick="OnDelete" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton Text="Update" runat="server" OnClick="OnUpdate" />
<asp:LinkButton Text="Cancel" runat="server" OnClick="OnCancel" />
</EditItemTemplate>
<FooterTemplate>
<asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="OnAdd" Width="75px" CommandName="Footer" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
<table>
<tr>
<th scope="col">Id</th>
<th scope="col">Name</th>
<th scope="col">Country</th>
<th scope="col">Action</th>
</tr>
<tr>
<td></td>
<td><asp:TextBox ID="txtName" runat="server" Text="Test Country" /></td>
<td><asp:TextBox ID="txtCountry" runat="server" Text="Test Country" /></td>
<td><asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="OnAdd" Width="75px" CommandName="EmptyDataTemplate" /></td>
</tr>
</table>
</EmptyDataTemplate>
</asp:GridView>
Namespaces
C#
using System.Data;
VB.Net
Imports System.Data
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] {
new DataColumn("Id"), new DataColumn("Name"), new DataColumn("Country") });
dt.Rows.Add(1, "John Hammond", "USA");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(3, "Suzanne Mathews", "France");
dt.Rows.Add(4, "Robert Schidner", "UK");
ViewState["Data"] = dt;
this.BindGrid();
}
}
protected void OnAdd(object sender, EventArgs e)
{
Control control = null;
if (GridView1.FooterRow != null)
{
control = GridView1.FooterRow;
}
else
{
control = GridView1.Controls[0].Controls[0];
}
string name = (control.FindControl("txtName") as TextBox).Text.Trim();
string country = (control.FindControl("txtCountry") as TextBox).Text.Trim();
DataTable dt = ViewState["Data"] as DataTable;
int lastId;
if (dt.Rows.Count == 0)
{
lastId = 1;
dt.Rows.Add(lastId, name, country);
}
else
{
lastId = Convert.ToInt32(dt.Rows[dt.Rows.Count - 1]["Id"].ToString());
dt.Rows.Add(lastId + 1, name, country);
}
ViewState["Data"] = dt;
this.BindGrid();
}
protected void OnDelete(object sender, EventArgs e)
{
int index = ((sender as LinkButton).NamingContainer as GridViewRow).RowIndex;
DataTable dt = ViewState["Data"] as DataTable;
dt.Rows[index].Delete();
ViewState["Data"] = dt;
this.BindGrid();
}
protected void OnRowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
this.BindGrid();
}
protected void OnUpdate(object sender, EventArgs e)
{
GridViewRow row = (sender as LinkButton).NamingContainer as GridViewRow;
string name = (row.FindControl("txtName") as TextBox).Text;
string country = (row.FindControl("txtCountry") as TextBox).Text;
DataTable dt = ViewState["Data"] as DataTable;
dt.Rows[row.RowIndex]["Name"] = name;
dt.Rows[row.RowIndex]["Country"] = country;
ViewState["Data"] = dt;
GridView1.EditIndex = -1;
this.BindGrid();
}
protected void OnCancel(object sender, EventArgs e)
{
GridView1.EditIndex = -1;
this.BindGrid();
}
private void BindGrid()
{
DataTable dt = ViewState["Data"] as DataTable;
GridView1.DataSource = dt;
GridView1.DataBind();
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
Dim dt As DataTable = New DataTable()
dt.Columns.AddRange(New DataColumn(2) {
New DataColumn("Id"), New DataColumn("Name"), New DataColumn("Country")})
dt.Rows.Add(1, "John Hammond", "USA")
dt.Rows.Add(2, "Mudassar Khan", "India")
dt.Rows.Add(3, "Suzanne Mathews", "France")
dt.Rows.Add(4, "Robert Schidner", "UK")
ViewState("Data") = dt
Me.BindGrid()
End If
End Sub
Protected Sub OnAdd(ByVal sender As Object, ByVal e As EventArgs)
Dim control As Control = Nothing
If GridView1.FooterRow IsNot Nothing Then
control = GridView1.FooterRow
Else
control = GridView1.Controls(0).Controls(0)
End If
Dim name As String = (TryCast(control.FindControl("txtName"), TextBox)).Text.Trim()
Dim country As String = (TryCast(control.FindControl("txtCountry"), TextBox)).Text.Trim()
Dim dt As DataTable = TryCast(ViewState("Data"), DataTable)
Dim lastId As Integer
If dt.Rows.Count = 0 Then
lastId = 1
dt.Rows.Add(lastId, name, country)
Else
lastId = Convert.ToInt32(dt.Rows(dt.Rows.Count - 1)("Id").ToString())
dt.Rows.Add(lastId + 1, name, country)
End If
ViewState("Data") = dt
Me.BindGrid()
End Sub
Protected Sub OnDelete(ByVal sender As Object, ByVal e As EventArgs)
Dim index As Integer = (TryCast((TryCast(sender, LinkButton)).NamingContainer, GridViewRow)).RowIndex
Dim dt As DataTable = TryCast(ViewState("Data"), DataTable)
dt.Rows(index).Delete()
ViewState("Data") = dt
Me.BindGrid()
End Sub
Protected Sub OnRowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs)
GridView1.EditIndex = e.NewEditIndex
Me.BindGrid()
End Sub
Protected Sub OnUpdate(ByVal sender As Object, ByVal e As EventArgs)
Dim row As GridViewRow = TryCast((TryCast(sender, LinkButton)).NamingContainer, GridViewRow)
Dim name As String = (TryCast(row.FindControl("txtName"), TextBox)).Text
Dim country As String = (TryCast(row.FindControl("txtCountry"), TextBox)).Text
Dim dt As DataTable = TryCast(ViewState("Data"), DataTable)
dt.Rows(row.RowIndex)("Name") = name
dt.Rows(row.RowIndex)("Country") = country
ViewState("Data") = dt
GridView1.EditIndex = -1
Me.BindGrid()
End Sub
Protected Sub OnCancel(ByVal sender As Object, ByVal e As EventArgs)
GridView1.EditIndex = -1
Me.BindGrid()
End Sub
Private Sub BindGrid()
Dim dt As DataTable = TryCast(ViewState("Data"), DataTable)
GridView1.DataSource = dt
GridView1.DataBind()
End Sub
Screenshot