Dynamically Adding/Deleting Rows To Table

We can add/delete rows to asp.net table component dynamically with preservation of input data.

AddNewRow.aspx Page:






    
    
        function LinkButtonClick(lbID) {
            var ind = lbID.split("Row_")[1];
            ind = ind.split("Col_")[0];
            document.getElementById("").value = ind;
            document.getElementById("").click();
        }
    
    
    .lblmouse
    {
        font-size:70%;
        color:Red;
        cursor:pointer;
        text-transform:uppercase;
    }
    


    
    
    
        
    
    
    
    
    
        
    
    


 
 
AddNewRow.aspx.cs Page:
 
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class AddNewRow : System.Web.UI.Page
{

    private int numOfRows = 1;
    DataTable dtStates;
    const int colsCount = 10;//You can changed the value of 3 based on you requirements
    // Now iterate through the table and add your controls

    protected void Page_Load(object sender, EventArgs e)
    {
        //Generate the Rows on Initial Load
        if (!Page.IsPostBack)
        {
            GenerateTable(numOfRows);
        }
    }

    protected void btnAddNew_Click(object sender, EventArgs e)
    {
        if (ViewState["RowsCount"] != null)
        {
            numOfRows = Convert.ToInt32(ViewState["RowsCount"].ToString());
            GenerateTable(numOfRows);
        }
    }

    private void SetPreviousData(int rowsCount, int colsCount)
    {
        Table table = (Table)this.Page.FindControl("PlaceHolder1").FindControl("Table1"); // ****         if (table != null) {
        for (int i = 0; i < rowsCount; i++)
        {
            for (int j = 0; j < colsCount; j++)
            {
                if (j < colsCount - 2)
                {
                    //Extracting the Dynamic Controls from the Table
                    TextBox tb = (TextBox)table.Rows[i].Cells[j].FindControl("TextBoxRow_" + i + "Col_" + j);
                    //Use Request object for getting the previous data of the dynamic textbox
                    tb.Text = Request.Form["TextBoxRow_" + i + "Col_" + j];//*****                 }
                }
                else if (j == colsCount - 2)
                {
                    //Extracting the Dynamic Controls from the Table
                    DropDownList ddl = (DropDownList)table.Rows[i].Cells[j].FindControl("DropDownListRow_" + i + "Col_" + j);
                    //Use Request object for getting the previous data of the dynamic textbox
                    ddl.Text = Request.Form["DropDownListRow_" + i + "Col_" + j];//*****                 }                
                }
                else
                {
                    //Extracting the Dynamic Controls from the Table
                    Label lb = (Label)table.Rows[i].Cells[j].FindControl("LinkButtonRow_" + i + "Col_" + j);
                    //Use Request object for getting the previous data of the dynamic textbox
                    //lb.Text = Request.Form["LinkButtonRow_" + i + "Col_" + j];//*****                 }                   
                    //lb.Click += new EventHandler(lb_Click);
                }
            }
        }
    }

    private void GenerateTable(int rowsCount)
    {
        //Creat the Table and Add it to the Page

        Table table = new Table();
        table.ID = "Table1";
        PlaceHolder1.Controls.Add(table);//******         //The number of Columns to be generated

        for (int i = 0; i < rowsCount; i++)
        {
            TableRow row = new TableRow();
            row.ID = "Row_" + i;
            for (int j = 0; j < colsCount; j++)
            {
                if (j < colsCount - 2)
                {
                    TableCell cell = new TableCell();
                    TextBox tb = new TextBox();
                    // Set a unique ID for each TextBox added

                    tb.ID = "TextBoxRow_" + i + "Col_" + j;
                    // Add the control to the TableCell
                    cell.Controls.Add(tb);
                    // Add the TableCell to the TableRow
                    row.Cells.Add(cell);
                }
                else if (j == colsCount - 2)
                {
                    TableCell cell = new TableCell();
                    DropDownList ddl = new DropDownList();
                    // Set a unique ID for each DropDownList added

                    dtStates = fetchStates();
                    ddl.DataSource = dtStates;
                    ddl.DataValueField = "StateID";
                    ddl.DataTextField = "StateName";
                    ddl.DataBind();
                    ddl.ID = "DropDownListRow_" + i + "Col_" + j;
                    // Add the control to the TableCell
                    cell.Controls.Add(ddl);
                    // Add the TableCell to the TableRow
                    row.Cells.Add(cell);
                }
                else
                {
                    TableCell cell = new TableCell();
                    Label lb = new Label();
                    // Set a unique ID for each LinkButton added

                    lb.ID = "LinkButtonRow_" + i + "Col_" + j;                        
                    lb.Text = "delete";                    
                    lb.Attributes.Add("OnClick", "LinkButtonClick('" + lb.ClientID + "')");
                    lb.CssClass = "lblmouse";

                    // Add the control to the TableCell
                    cell.Controls.Add(lb);
                    // Add the TableCell to the TableRow
                    row.Cells.Add(cell);                
                }
            }
            // And finally, add the TableRow to the Table
            table.Rows.Add(row);
        }

        //Set Previous Data on PostBacks
        SetPreviousData(rowsCount, colsCount);
        //Sore the current Rows Count in ViewState
        rowsCount++;
        ViewState["RowsCount"] = rowsCount;
    }

    protected void lb_Click(object sender, EventArgs e)
    {
        if (ViewState["RowsCount"] != null)
        {
            int deleteID = int.Parse(HiddenField1.Value);
            numOfRows = Convert.ToInt32(ViewState["RowsCount"].ToString());
            GenerateTableOnDelete(numOfRows, deleteID);
        }
    }

    protected void GenerateTableOnDelete(int rowsCount, int deleteID)
    {
        rowsCount--;
        //Creat the Table and Add it to the Page

        Table table = new Table();
        table.ID = "Table1";
        PlaceHolder1.Controls.Add(table);//******         //The number of Columns to be generated

        const int colsCount = 10;//You can changed the value of 3 based on you requirements
        // Now iterate through the table and add your controls
        
        for (int i = 0, k = 0; i < rowsCount; i++)
        {
            if (i < deleteID)
                k = i;
            else
                k = i - 1;
            if (deleteID != i)
            {
                TableRow row = new TableRow();
                row.ID = "Row_" + k;
                for (int j = 0; j < colsCount; j++)
                {
                    if (j < colsCount - 2)
                    {
                        TableCell cell = new TableCell();
                        TextBox tb = new TextBox();
                        // Set a unique ID for each TextBox added

                        tb.ID = "TextBoxRow_" + k + "Col_" + j;
                        // Add the control to the TableCell
                        cell.Controls.Add(tb);
                        // Add the TableCell to the TableRow
                        row.Cells.Add(cell);
                    }
                    else if (j == colsCount - 2)
                    {
                        TableCell cell = new TableCell();
                        DropDownList ddl = new DropDownList();
                        // Set a unique ID for each DropDownList added

                        dtStates = fetchStates();
                        ddl.DataSource = dtStates;
                        ddl.DataValueField = "StateID";
                        ddl.DataTextField = "StateName";
                        ddl.DataBind();
                        ddl.ID = "DropDownListRow_" + k + "Col_" + j;
                        // Add the control to the TableCell
                        cell.Controls.Add(ddl);
                        // Add the TableCell to the TableRow
                        row.Cells.Add(cell);
                    }
                    else
                    {
                        TableCell cell = new TableCell();
                        Label lb = new Label();
                        // Set a unique ID for each LinkButton added

                        lb.ID = "LinkButtonRow_" + k + "Col_" + j;
                        lb.Text = "delete";                        
                        lb.Attributes.Add("OnClick", "LinkButtonClick('" + lb.ClientID + "')");
                        lb.CssClass = "lblmouse";

                        // Add the control to the TableCell
                        cell.Controls.Add(lb);
                        // Add the TableCell to the TableRow
                        row.Cells.Add(cell);
                    }
                }
                // And finally, add the TableRow to the Table
                table.Rows.Add(row);
            }
        }

        //Set Previous Data on PostBacks
        SetPreviousDataOnDelete(rowsCount, colsCount, deleteID);
        //Sore the current Rows Count in ViewState
        ViewState["RowsCount"] = rowsCount;
    }

    private void SetPreviousDataOnDelete(int rowsCount, int colsCount, int deleteID)
    {
        Table table = (Table)this.Page.FindControl("PlaceHolder1").FindControl("Table1"); // ****         if (table != null) {
        for (int i = 0, k = 0; i < rowsCount; i++)
        {
            if (i < deleteID)
                k = i;
            else
                k = i - 1;
            if (deleteID != i)
            {
                for (int j = 0; j < colsCount; j++)
                {
                    if (j < colsCount - 2)
                    {
                        //Extracting the Dynamic Controls from the Table
                        TextBox tb = (TextBox)table.Rows[k].Cells[j].FindControl("TextBoxRow_" + k + "Col_" + j);
                        //Use Request object for getting the previous data of the dynamic textbox
                        tb.Text = Request.Form["TextBoxRow_" + i + "Col_" + j];//*****                 }
                    }
                    else if (j == colsCount - 2)
                    {
                        //Extracting the Dynamic Controls from the Table
                        DropDownList ddl = (DropDownList)table.Rows[k].Cells[j].FindControl("DropDownListRow_" + k + "Col_" + j);
                        //Use Request object for getting the previous data of the dynamic textbox
                        ddl.Text = Request.Form["DropDownListRow_" + i + "Col_" + j];//*****                 }                
                    }
                    else
                    {
                        //Extracting the Dynamic Controls from the Table
                        Label lb = (Label)table.Rows[k].Cells[j].FindControl("LinkButtonRow_" + k + "Col_" + j);
                        //Use Request object for getting the previous data of the dynamic textbox
                        //lb.Text = Request.Form["LinkButtonRow_" + i + "Col_" + j];//*****                 }                   
                        //lb.Click += new EventHandler(lb_Click);
                    }
                }
            }
        }
    }

    protected void btnPost_Click(object sender, EventArgs e)
    {
        if (ViewState["RowsCount"] != null)
        {
            numOfRows = Convert.ToInt32(ViewState["RowsCount"].ToString());
        }

        int rowsCount = numOfRows - 1;
        GenerateTable(rowsCount);

        Table table = (Table)this.Page.FindControl("PlaceHolder1").FindControl("Table1"); // ****         if (table != null) {

        for (int i = 0; i < rowsCount; i++)
        {
            for (int j = 0; j < colsCount; j++)
            {
                if (j < colsCount - 2)
                {
                    //Extracting the Dynamic Controls from the Table
                    TextBox tb = (TextBox)table.Rows[i].Cells[j].FindControl("TextBoxRow_" + i + "Col_" + j);
                }
                else if (j == colsCount - 2)
                {
                    //Extracting the Dynamic Controls from the Table
                    DropDownList ddl = (DropDownList)table.Rows[i].Cells[j].FindControl("DropDownListRow_" + i + "Col_" + j);
                }
                else
                {
                    //Extracting the Dynamic Controls from the Table
                    Label lb = (Label)table.Rows[i].Cells[j].FindControl("LinkButtonRow_" + i + "Col_" + j);
                }
            }
        }
    }

    protected DataTable fetchStates()
    {
        DataTable dtSt = new DataTable();
        dtSt.Columns.Add("StateID");
        dtSt.Columns.Add("StateName");
        DataRow drSt = dtSt.NewRow();
        drSt[0] = 0;
        drSt[1] = "Select";
        dtSt.Rows.Add(drSt);
        drSt = dtSt.NewRow();
        drSt[0] = 1;
        drSt[1] = "Delhi";
        dtSt.Rows.Add(drSt);
        drSt = dtSt.NewRow();
        drSt[0] = 2;
        drSt[1] = "Bhubaneswar";
        dtSt.Rows.Add(drSt);
        drSt = dtSt.NewRow();
        drSt[0] = 3;
        drSt[1] = "Cuttuck";
        dtSt.Rows.Add(drSt);
        drSt = dtSt.NewRow();
        drSt[0] = 4;
        drSt[1] = "Puri";
        dtSt.Rows.Add(drSt);
        return dtSt;
    }
}
150 150 Burnignorance | Where Minds Meet And Sparks Fly!