如何访问用户控制页面中动态创建表的文本框? [英] how to access the textbox of dynamically created table in user control page?
问题描述
实际上,我正在使用asp.net和c#创建Web模板.
在我的用户控制页面中,我必须动态创建表.我只是从XML文件中读取数据,然后检索每个表的名称,列数和行数.在创建表格时,我为每个单元格分配了名称和ID.因为我有一行,其中包括一些用于将数据添加到数据库的文本框.但是创建表后,我无法基于id访问文本框单元格以获取其数据并将其插入数据库.我的动态表格代码是:
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);
}
}
我的包含PlaceHolder的用户控制页面如下:
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;
}
我已经尝试过pn_Uc_TModule.FindControl("tb" + i +"_AddModule")和This.ph_Uc_AddModule.FindControl("tb" + i +"_AddModule"),但仍然无法获得texbox数据将其插入数据库.你能指导我如何完成它吗?感谢您的考虑.
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.
推荐答案
远
你可以试试看,
aspx.cs页面编写此代码,
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>" );
}
}
为什么不使用TextBox的值公开只读属性(TextBoxValue),一旦找到UserControl,只需选择UserControl.TextBoxValue即可:
UserControl
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
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]代码块[/edit]
[edit] code blocks added [/edit]
这篇关于如何访问用户控制页面中动态创建表的文本框?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!