1 Replies - 7012 Views - Last Post: 24 February 2012 - 05:43 AM Rate Topic: -----

#1 farmar290  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 5
  • Joined: 12-March 09

how to access the textbox of dynamically created table in user control

Posted 23 February 2012 - 10:35 PM

Actually i'm creating web template using asp.net and c#.
in my user control page i have to create the table dynamically. i just read the data from XML file then retrieve the name and number of columns and rows of each table. while i'm creating the table i assign the name and id to each cell. because i have one row including some textbox for adding the data to database. but after i have created the table i can not access to the textbox cells based on id to get their data and insert it to database. my dynamic table code is:

public void CreateAddDynamicTable()
{
    XmlDocument xDocRead = new XmlDocument();
    xDocRead.Load(Server.MapPath("ModuleTemp.xml"));
    string xModuleName = hid_ChooseModule.Value;
    XmlNode xColCounter = xDocRead.SelectSingleNode("ModuleTemp/" + xModuleName + "/List");
    int colCount = xColCounter.ChildNodes.Count;

    int nonPkCounter = 0;
    string[] nonPrimaryKey = new string[100];
    string[] nonPkNewDataTemp = new string[100];

    for (int i = 1; i <= colCount; i++)
    {
        if (xDocRead.SelectSingleNode("ModuleTemp/" + xModuleName + "/Add/TableColumn" + i).Attributes.GetNamedItem("IsPrimaryKey").Value == "N")
        {
            nonPrimaryKey[nonPkCounter] = xDocRead.SelectSingleNode("ModuleTemp/" + xModuleName + "/Add/TableColumn" + i).Attributes.GetNamedItem("Name").Value;
            nonPkCounter++;
        }
    }

    ph_Uc_AddModule.Controls.Clear();

    // Fetch the number of Rows and Columns for the table 
    // using the properties
    int tblRows = nonPkCounter;
    int tblCols = 2;

    // Create a Table and set its properties 
    Table tbl = new Table();
    // Add the table to the placeholder control
    ph_Uc_AddModule.Controls.Add(tbl);
    // Now iterate through the table and add your controls 
    for (int i = 0; i < tblRows; i++)
    {
        TableRow tr = new TableRow();
        for (int j = 0; j < tblCols; j++)
        {
            TableCell tc = new TableCell();
            Label td_Add_Header = new Label();
            TextBox td_Add = new TextBox();

            if (j == 0)
            {
                td_Add_Header.Text = nonPrimaryKey[i];
                td_Add_Header.ID = "lb" + (i + 1) + "_header_AddModule";

                // Add the control to the TableCell
                tc.Controls.Add(td_Add_Header);
                tc.CssClass = "td_Header_AddModule";
            }
            else
            {
                td_Add.Text = "";
                td_Add.ID = "tb" + (i + 1) + "_AddModule";
                // Add the control to the TableCell
                tc.Controls.Add(td_Add);
                tc.CssClass = "td_Tb_AddModule";
            }

            // Add the TableCell to the TableRow
            tr.Cells.Add(tc);
        }
        // Add the TableRow to the Table
        tbl.Rows.Add(tr);
    }
}



my user control page which is contain a PlaceHolder is as below:

<asp:Panel ID="pn_Uc_TModule" runat="server">

<asp:Table runat="server" ID="table_Uc_TModule" CssClass="table_Uc_TModule" Width="100%">
 <asp:TableRow runat="server" VerticalAlign="Top" Height="50px">
                <asp:TableCell runat="server">
                    <asp:Button runat="server" Text="" CssClass="btn_Add_Active" onclick="btn_AddNew_Click" />
                    <asp:Button ID="btn_Cancel_NewItem" runat="server" Text="" CssClass="btn_Cancel_New" onclick="btn_Cancel_AddNew" Visible="false" />

                    <asp:Table runat="server" ID="table_Uc_AddModule" Visible="false">
                        <asp:TableRow runat="server">
                            <asp:TableCell runat="server" >

                                <asp:PlaceHolder ID="ph_Uc_AddModule" runat="server">
                                </asp:PlaceHolder>

                            </asp:TableCell>
                        </asp:TableRow>
                        <asp:TableRow ID="TableRow1" runat="server">
                            <asp:TableCell runat="server" CssClass="td_Tb_AddModule" HorizontalAlign="Center">
                                <asp:Button ID="btn_Insert" runat="server" onclick="Uc_AddModule_ItemInsert" Text="" CssClass="btn_Add" />
                                <asp:Button ID="btn_Cancel" runat="server" onclick="Uc_AddModule_Clear" Text="" CssClass="btn_Clear" />
                            </asp:TableCell>
                        </asp:TableRow>
                    </asp:Table>

                </asp:TableCell>
            </asp:TableRow>
</asp:Table>
</asp:Panel>



i'm using below method in my insert function at the code behind to access the data inserted at the textbox:

for (int i = 1; i <= nonPkCounter; i++)
    {
        TextBox textBox = (ph_Uc_AddModule.FindControl("tb" + i + "_AddModule")) as TextBox;
        nonPkNewDataTemp[i] = textBox.Text;
    }



i have tried pn_Uc_TModule.FindControl("tb" + i + "_AddModule") and also This.ph_Uc_AddModule.FindControl("tb" + i + "_AddModule") but still con not get the texbox data to insert it to database. could you please guide me how to get it done.
appreciate your consideration.

Is This A Good Question/Topic? 0
  • +

Replies To: how to access the textbox of dynamically created table in user control

#2 Nakor  Icon User is offline

  • Professional Lurker
  • member icon

Reputation: 446
  • View blog
  • Posts: 1,501
  • Joined: 28-April 09

Re: how to access the textbox of dynamically created table in user control

Posted 24 February 2012 - 05:43 AM

Where are you call your CreateAddDynamicTable() method? Is this called during a specific page event or is it called when a user performs a specific action? When using dynamically created controls you need to be sure and reload the controls with the same ID's and in the same order as when they were originally created. Since you already have a method created to create the controls you should be able to call that method in the OnPreLoad event of the page life cycle. There is a fairly detailed post on working with dynamically created controls here.
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1