foreach 遍历页面所有控件并清除控件文本的问题

Leedsema 2008-11-24 03:55:03
    
protected void btSearch_Click(object sender, EventArgs e)
{
//先进行清空-----------------
///Control ctrl =new Control();
foreach (Control ctrl in Page.Controls)
{
if (ctrl.GetType()==typeof(Label))
((Label)ctrl).Text = "";
}

//以下语句有执行.....可以在页面上看到清除了DATAGRID的数据
dgOtherOutB.DataSource = null;
dgOtherOutB.DataBind();

//.................以下代码省略
}


以上语句为何不能清除页面上所有Label控件的文本?
谢谢各位!!!急救
...全文
413 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
一弗楚 2008-11-24
  • 打赏
  • 举报
回复
//先进行清空-----------------
foreach (Control ctrl in Page.Controls)
{
if (ctrl.GetType() == typeof(HtmlForm))
{
foreach (Control ctrl2 in ctrl.Controls)
{
if (ctrl2.GetType() == typeof(Label))
((Label)ctrl2).Text = "";
}
break;
}
}
criedshy 2008-11-24
  • 打赏
  • 举报
回复


      //递归清空Label
//调用:ClearAllLabel(Page.Controls);
private void ClearAllLabel(ControlCollection ctls)
{
foreach (Control ctrl in ctls)
{
if (control is System.Web.UI.WebControls.Label)
{
System.Web.UI.WebControls.Label lbl = (System.Web.UI.WebControls.Label)control;
lbl.Text= "";
}
if(control.Controls.Count>0)
{
ClearAllLabel(control.Controls);
}
}
}
Zhanlixin 2008-11-24
  • 打赏
  • 举报
回复
前台:
增加一panel控件,其他所有控件都放进panel
<asp:panel id="pnlCollect" runat="server" width="100%" Height="700px" >
...
</asp:panel>


后台:
foreach (Control ctrl in this.pnlCollect.Controls)
{
//Response.Write(ctrl.GetType().ToString()+"\n");
if (ctrl.GetType().ToString() == "System.Web.UI.WebControls.Label")
{
((Label)ctrl).Text = "";

}
}
goalsunboy 2008-11-24
  • 打赏
  • 举报
回复
首先,Control ctrl in Page.Controls这个语句遍历的只是Page下的所有的Lable控件,但是当你的Lable控件在其他控件中的时候,这种遍历就不能找到Lable控件了,我觉得要遍历网页中所有的Lable控件可以采用递归算法,代码如下:

//先自定义一个清空的方法
Public Void ClearAllLables(ControlCollection MyControlCollections)
{
foreach(System.Web.UI.Control MyControls in MyControllections)
{
if(MyControls.HasControls())
{
ClearAllLables(MyControls.Controls);
}
else
{
      if(MyControls is System.Web.UI.WebControls.Lable)
{
((Lable)MyControls).Text=String.Empty;
}
    }
}
}
//再调用这个方法就行了

protected void btSearch_Click(object sender, EventArgs e)
{
ClearAllLables(this.Controls);
}
「已注销」 2008-11-24
  • 打赏
  • 举报
回复
如何递归呢?教育一下我哦,
难道说是这样?
            if (ctrl.GetType()==typeof(Label))
{
((Label)ctrl).Text = "";

}
//这个不是已经递归了吗?
criedshy 2008-11-24
  • 打赏
  • 举报
回复
你要遍历所有的控件,怕是要用递归吧,因为有些控件是容器

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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