Search This Blog

Showing posts with label Gridview. Show all posts
Showing posts with label Gridview. Show all posts

Thursday, 31 December 2015

Dynamically add and remove rows in gridview

Step 1:- (Default.aspx) code

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Demo.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Dynamically add and remove rows in gridview</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false">

                <Columns>

                    <asp:BoundField DataField="RowNumber" HeaderText="Row Number" />

                    <asp:TemplateField HeaderText="Header 1">

                        <ItemTemplate>

                            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Column1") %>'></asp:TextBox>

                        </ItemTemplate>

                    </asp:TemplateField>

                    <asp:TemplateField HeaderText="Header 2">

                        <ItemTemplate>

                            <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Column2") %>'></asp:TextBox>

                        </ItemTemplate>

                    </asp:TemplateField>

                    <asp:TemplateField HeaderText="Header 3">

                        <ItemTemplate>

                            <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Column3") %>'></asp:TextBox>

                        </ItemTemplate>

                    </asp:TemplateField>

                    <asp:TemplateField HeaderText="Delete">

                        <ItemStyle HorizontalAlign="Center" />

                        <ItemTemplate>

                            <asp:LinkButton ID="LinkButton1" runat="server" Text="Delete" RowNumber='<%#Container.DataItemIndex %>' OnClick="LinkButton1_Click" />

                        </ItemTemplate>

                        <FooterStyle HorizontalAlign="Right" />

                        <FooterTemplate>

                            <asp:Button ID="btnAddNewRow" runat="server" Text="Add New Row" OnClick="ButtonAdd_Click" />

                        </FooterTemplate>

                    </asp:TemplateField>

                </Columns>

            </asp:GridView>
        </div>
    </form>
</body>
</html>

Step 2:- (Default.aspx.cs) code

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Demo
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                SetInitialRow();
            }
        }

        private void SetInitialRow()
        {

            DataTable dataTable = new DataTable();

            DataRow dataRow = null;

            dataTable.Columns.Add(new DataColumn("RowNumber", typeof(string)));

            dataTable.Columns.Add(new DataColumn("Column1", typeof(string)));

            dataTable.Columns.Add(new DataColumn("Column2", typeof(string)));

            dataTable.Columns.Add(new DataColumn("Column3", typeof(string)));

            dataRow = dataTable.NewRow();

            dataRow["RowNumber"] = 1;

            dataRow["Column1"] = string.Empty;

            dataRow["Column2"] = string.Empty;

            dataRow["Column3"] = string.Empty;

            dataTable.Rows.Add(dataRow);

            ViewState["ViewStateTable"] = dataTable;

            Gridview1.DataSource = dataTable;

            Gridview1.DataBind();

        }

        private void AddNewRowToGrid()
        {
            int rowIndex = 0;

            if (ViewState["ViewStateTable"] != null)
            {
                DataTable dataTable = (DataTable)ViewState["ViewStateTable"];

                DataRow dataRow = null;

                if (dataTable.Rows.Count > 0)
                {
                    for (int i = 1; i <= dataTable.Rows.Count; i++)
                    {
                        TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");

                        TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");

                        TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

                        dataRow = dataTable.NewRow();

                        dataRow["RowNumber"] = i + 1;

                        dataTable.Rows[i - 1]["Column1"] = box1.Text;

                        dataTable.Rows[i - 1]["Column2"] = box2.Text;

                        dataTable.Rows[i - 1]["Column3"] = box3.Text;

                        rowIndex++;
                    }

                    dataTable.Rows.Add(dataRow);

                    ViewState["ViewStateTable"] = dataTable;

                    Gridview1.DataSource = dataTable;

                    Gridview1.DataBind();
                }
            }

            else
            {
                Response.Write("ViewState is null");
            }
        }

        protected void ButtonAdd_Click(object sender, EventArgs e)
        {
            AddNewRowToGrid();
        }

        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            int rowIndex = 0;

            int index = Convert.ToInt32(((LinkButton)sender).Attributes["RowNumber"]);

            if (ViewState["ViewStateTable"] != null)
            {
                DataTable dataTable = (DataTable)ViewState["ViewStateTable"];

                if (dataTable.Rows.Count == 1)
                {
                    LinkButton lnk = (LinkButton)Gridview1.Rows[0].FindControl("LinkButton1");
                    lnk.Enabled = false;
                }
                else
                {
                    DataRow dataRow;

                    for (int i = 1; i <= dataTable.Rows.Count; i++)
                    {
                        TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");

                        TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");

                        TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

                        dataRow = dataTable.NewRow();

                        dataTable.Rows[i - 1]["Column1"] = box1.Text;

                        dataTable.Rows[i - 1]["Column2"] = box2.Text;

                        dataTable.Rows[i - 1]["Column3"] = box3.Text;

                        rowIndex++;
                    }

                    dataTable.Rows.RemoveAt(index);

                    ViewState["ViewStateTable"] = dataTable;

                    Gridview1.DataSource = dataTable;

                    Gridview1.DataBind();
                }
            }
        }
    }
}

Output:-