Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C# ASP.NET Ajax User-controls , +
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.
Posted 23-Feb-12 19:21pm
Far sh488
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

Hi Far
you can try this,
 
aspx.cs page write this code,
 
foreach (Control c in form1.Controls)
       {
           if (c.GetType ( ).Name.ToLower ( ) == "webusercontrol_ascx")
           {
               UserControl uc = (UserControl)c;
 
              TextBox txt = (TextBox)uc.FindControl ( "controlidname" );
               Response.Write ( "Controlvalue:                " + txt.Text + "</br>" );
}
}
  Permalink  
v2
Comments
Far sh at 24-Feb-12 2:24am
   
Hi Bojjiaiah,
thanks for your answer.
actually my user control page is inside an updatepanel in my aspx page as below:
 
<asp:UpdatePanel ID="upn_ModuleContent" runat="server" UpdateMode="Conditional">


<asp:uc_Module_Temp ID="uc_Module_Temp1" runat="server" Visible="false" />
 

<Triggers>
<asp:AsyncPostBackTrigger ControlID="btn_Home" EventName="Click" />
</Triggers>


 
based on what you mentioned i have tried:
 
foreach (Control c in MTMainForm.Controls)
{
if (c.GetType().Name.ToLower() == "uc_Module_Temp_ascx")
{
UserControl uc = (UserControl)c;
 
TextBox txt = (TextBox)uc.FindControl("tb2_AddModule");
Response.Write("Controlvalue: " + txt.Text + "</br>");
}
}
 
and also:
 
foreach (Control c in MTMainForm.Controls)
{
if (c.GetType().Name.ToLower() == "uc_Module_Temp1")
{
UserControl uc = (UserControl)c;
 
TextBox txt = (TextBox)uc.FindControl("tb2_AddModule");
Response.Write("Controlvalue: " + txt.Text + "</br>");
}
}
 
but still can not access to the textbox of my usercontrol page...
any other option or did i missed something?
thanks
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 3

why don't u expose a read-only property (TextBoxValue) with the value of the TextBox and once you find the UserControl, just select the UserControl.TextBoxValue :
 
UserControl
 
public int TextBoxValue
{
   get { return this.txtBox.Text; }
}
 
ASPX
foreach (Control c in form1.Controls)
 {
     if (c.GetType ( ).Name.ToLower ( ) == "webusercontrol_ascx")
     {
        UserControl uc = (UserControl)c;
        if(uc != null)
        {
           Response.Write ( "Controlvalue: " + uc.TextBoxValue + "" );
        }
     }
}
[edit] code blocks added [/edit]
  Permalink  
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 250
1 George Jonsson 175
2 Jochen Arndt 150
3 Kornfeld Eliyahu Peter 149
4 PIEBALDconsult 110
0 OriginalGriff 6,080
1 DamithSL 4,648
2 Maciej Los 4,087
3 Kornfeld Eliyahu Peter 3,624
4 Sergey Alexandrovich Kryukov 3,294


Advertise | Privacy | Mobile
Web03 | 2.8.141220.1 | Last Updated 6 Nov 2012
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100