Read all rows and cell values dynamic table asp.net

39,138

Solution 1

Since you're creating the table dynamically, you can't reference it like controls that are statically embedded on the page. To get a reference to the Table object you'll need to find it in the Page's ControlCollection and cast it out, just like in the example:

Table table = (Table)Page.FindControl("Table1");

The Table class contains a table row collection which you will then need to loop over. Each row in the row collection has a collection of cells, each of which will contain child controls (see: Controls property) which will be your textboxes.

Solution 2

Hi if you take look at SetPreviousData this function is trying to read previous textbox value but there is some thing wrong with it i have done following changes and it works fine first of all the following code in SetPreviousData

 Table table = (Table)Page.FindControl("Table1");

is always returning NULL because this function is not a recursive function and your table may be inside a container in your page so add following function to your code

private Control FindControlRecursive(Control root, string id)
{
    if (root.ID == id)
    {
        return root;
    }

    foreach (Control c in root.Controls)
    {
        Control t = FindControlRecursive(c, id);
        if (t != null)
        {
            return t;
        }
    }

    return null;
}

and change the code

Table table = (Table)Page.FindControl("Table1");

to

Table table = FindControlRecursive(Page , "Table1") as Table;

in next step change the following code in SetPreviousData

tb.Text = Request.Form["TextBoxRow_" + i + "Col_" + j];

to

tb.Text = Request.Form[tb.UniqueID];

set break points and see the results if it's tough to you let me know to provide you a function which returns table data in a datatable

Share:
39,138
Admin
Author by

Admin

Updated on April 21, 2020

Comments

  • Admin
    Admin about 4 years

    I found the tutorial to create a dynamic table and add rows:

    http://geekswithblogs.net/dotNETvinz/archive/2009/06/29/faq-dynamically-adding-rows-in-asp-table-on-button-click.aspx

    How can I read all rows in the table, and then the values ​​of the textbox in the cells? The values ​​are entered in a table in a database (SQL Server). Can I continue to use C# and asp.net or do I have to use Javascript?

    I hope someone will give me help.

    This is the code:

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Dynamic Adding of Rows in ASP Table Demo</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Add New Row" />
        </form>
        </body>
    </html>
    

    CODE BEHIND:

    public partial class _Default1 : System.Web.UI.Page
    {
        //A global variable that will hold the current number of Rows
        //We set the values to 1 so that it will generate a default Row when the page loads
        private int numOfRows = 1;
    
        protected void Page_Load(object sender, EventArgs e)
        {
            //Generate the Rows on Initial Load
            if (!Page.IsPostBack)
            {
                GenerateTable(numOfRows);
            }
        }
    
        protected void Button1_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)Page.FindControl("Table1");
            if (table != null)
            {
                for (int i = 0; i < rowsCount; i++)
                {
                    for (int j = 0; j < colsCount; j++)
                    {
                        //Extracting the Dynamic Controls from the Table
                        TextBox tb = (TextBox)table.Rows[i].Cells[j].FindControl("TextBoxRow_" + i + "Col_" + j);
                        //Use Request objects for getting the previous data of the dynamic textbox
                        tb.Text = Request.Form["TextBoxRow_" + i + "Col_" + j];
                    }
                }
            }
        }
    
        private void GenerateTable(int rowsCount)
        {
    
            //Creat the Table and Add it to the Page
            Table table = new Table();
            table.ID = "Table1";
            Page.Form.Controls.Add(table);
    
            //The number of Columns to be generated
            const int colsCount = 3;//You can changed the value of 3 based on you requirements
    
            // Now iterate through the table and add your controls
    
            for (int i = 0; i < rowsCount; i++)
            {
                TableRow row = new TableRow();
                for (int j = 0; j < colsCount; j++)
                {
                    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);
                }
    
                // 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;
        }
    }