【发布时间】:2015-10-28 18:43:25
【问题描述】:
这方面有很多例子,我对使用递归查找控件的概念非常熟悉。一旦在回发中找到控件,就可以与之交互等。
我的 HTML 标记中有一个空的 asp:table:
<asp:Table ID="editDataTable" runat="server">
</asp:Table>
在 Page_Load 上,表格中填充了许多行和许多列(我很自豪我发现了这一点)。在一些表格单元格内有一个<asp:TextBox />。
你猜对了,我需要获取这些文本框的值!
(我已经拿到了递归的代码,检查了一下,看起来不错。)
我的表有两列。左侧包含“公司名称、电话”等标题,右侧列包含带有相应标题值的文本框。因此用户可以编辑文本框(例如,如果电话号码发生变化)并提交更改。
显然,行是根据用户动态添加的。
我遇到的问题是:您需要在填充表格时将控件添加到页面。大致如下:
myTable.Control.Add(new TextBox());
就我而言,我的表称为editDataTable。所以在我添加行的代码中,我也添加了控件,如下所示。
for (int i = 0; i < rowCount; i++)
{
editDataTable.Rows.Add(tblRow[j]); // This is where I add the ROW to my sexy table
editDataTable.Controls.Add(new TextBox()); // This is where I add the control
}
那些清醒的人会知道你不能将文本框控件添加到表格中!
最后,我的问题是:
- 如何为表格中的文本框添加控件?
- 在哪里添加它们?
- 是否有任何额外的建议可以帮助我完成检索动态添加的文本框的文本值的任务?
这是我的递归代码,以防你好奇:
private void getControls(Control parent)
{
foreach (Control c in parent.Controls)
{
if (c is TextBox && c.ID == null)
{
//Stuff
}
if (c.Controls.Count > 0)
{
getControls(c);
}
}
}
【问题讨论】:
-
不喜欢Control.FindControl 方法,这基本上是为您完成所有这些?或者您没有要获取的 ID?
-
Control.FindControl 不会在所有控件中递归。只有页面控件。反正没有身份证
-
您可以根据行号和列号生成ID。
-
来个漂亮的recursive FindControl 怎么样?
-
@R0MANARMY:我只能想到这种方法完全可行的 Intranet 环境。但即使有 100 个人问我为什么 WebApplication 不能像 WinForm-App 那样运行,我也不会这样做。我在 TextChanged 上完成自动更新的单一案例是一个时间紧迫的 Intranet 应用程序,适用于少数使用条形码扫描仪并按计件系统付费的人。
标签: c# asp.net dynamic-data