Hi Waghmare,
Here i have created sample that full fill your requirement. Yoou need to implement same for edit and update the record.
HTML
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" ShowFooter="true">
    <Columns>
        <asp:TemplateField HeaderText="Id">
            <ItemTemplate>
                <asp:Label ID="lblId" runat="server" Text='<%# Eval("Id") %>' />
            </ItemTemplate>
            <FooterTemplate>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Name">
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' />
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="txtName" runat="server" Text="Test Name" />
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Country">
            <ItemTemplate>
                <asp:Label ID="lblCountry" runat="server" Text='<%# Eval("Country") %>' />
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="txtCountry" runat="server" Text="Test Country" />
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Action">
            <ItemTemplate>
                <asp:Button Text="Delete" runat="server" OnClick="Delete" CommandArgument='<%# Eval("Id") %>'
                    Width="75px" />
            </ItemTemplate>
            <FooterTemplate>
                <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="Add" 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="Add" Width="75px" CommandName="EmptyDataTemplate" />
                </td>
            </tr>
        </table>
    </EmptyDataTemplate>
</asp:GridView>
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");
        GridView1.DataSource = dt;
        GridView1.DataBind();
        ViewState["Data"] = dt;
    }
}
protected void Add(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);
    }
    GridView1.DataSource = dt;
    GridView1.DataBind();
    ViewState["Data"] = dt;
}
protected void Delete(object sender, EventArgs e)
{
    string id = ((sender as Button)).CommandArgument;
    DataTable dt = ViewState["Data"] as DataTable;
    DataRow dr = dt.Select("Id=" + id)[0];
    dt.Rows.Remove(dr);
    GridView1.DataSource = dt;
    GridView1.DataBind();
    ViewState["Data"] = dt;
}
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Dim dt As 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")
        GridView1.DataSource = dt
        GridView1.DataBind()
        ViewState("Data") = dt
    End If
End Sub
Protected Sub Add(sender As Object, 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
    GridView1.DataSource = dt
    GridView1.DataBind()
    ViewState("Data") = dt
End Sub
Protected Sub Delete(sender As Object, e As EventArgs)
    Dim id As String = TryCast(sender, Button).CommandArgument
    Dim dt As DataTable = TryCast(ViewState("Data"), DataTable)
    Dim dr As DataRow = dt.[Select](Convert.ToString("Id=") & id)(0)
    dt.Rows.Remove(dr)
    GridView1.DataSource = dt
    GridView1.DataBind()
    ViewState("Data") = dt
End Sub
Screenshot
