[求助]为什么在服务器端获取不到DataList模板列中动态生成的TextBox啊?

jj_ii 2009-01-16 09:02:10
我在DataList控件的ItemDataBound事件中,动态生成了一个TextBox控件,并将它添加到DataList中:
protected void DataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
TextBox txtBo = new TextBox(); //动态生成了一个TextBox控件
DataRowView drv = (DataRowView)e.Item.DataItem; //得到DataRowView数据
txtBo.Text = "t" + drv[0].ToString(); //将DataRowView中的数据放置在文本框中
txtBo.ID = drv[1].ToString(); //将DataRowView中的数据放置在文本框中

e.Item.Controls.Add(txtBo); //将生成的TextBox加入到DataList中
}

但是,在把页面回传到服务器时,遍历DataList内的子控件时,怎么也遍历不到动态生成的TextBox!!!!
遍历的代码如下:(其中DataStuNo是DataList的ID名称,这段代码在点击页面上按钮触发)
for (int i = 0; i < DataStuNo.Items.Count; i++)
{
foreach (Control c in DataStuNo.Items[i].Controls)
{
if (c is TextBox)
{
TextBox tb = (TextBox)c;
...
//....处理TextBox
//....中的数据
}

//下面调试结果中没遍历到TextBox
Label1.Text = c.getType().ToString() + " <br />" + Label1.Text ;
}
}

请问为什么在服务器端获取不到动态生成的TextBox啊??我写的程序不对吗?怎样才能获取TextBox控件呢??恳请高手指点!!!
...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jack_xiao 2009-01-16
  • 打赏
  • 举报
回复
UP
jimu8130 2009-01-16
  • 打赏
  • 举报
回复
1 楼主应该先看下页面生命周期相关事件的作用和应用。
2 一般来说,page_load事件应该是直观的能够添加动态控件的地方,在其以后发生的事件写动态添加控件将不会写入到页面控件树,postback后是不能被后台识别的
3 建议你去博客园的catchen那里看看动态添加控件系列文章!
jiang_jiajia10 2009-01-16
  • 打赏
  • 举报
回复
ItemDataBound 只负责绑定数据上去,添加控件是不会保留至下次请求的
就是你找不到的原因
Jinglecat 2009-01-16
  • 打赏
  • 举报
回复
1. 你这样做是不行的

2. 动态添加控件的那段代码,必须保证每次请求都能运行(http两次请求之间是无状态的,回传时候的根本不知道上次你在 ItemDataBound 创建的控件)

3. 最简单的解决当然是用 声明方式

4. 若要动态,你需要事先的动态模板列然后加入控件(在 Page_Init 之前),ItemDataBound 只负责绑定数据上去,添加控件是不会保留至下次请求的
leo_bogard 2009-01-16
  • 打赏
  • 举报
回复
up

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧