博客统计信息

51cto推荐博客
用户名:BruceAndLee
文章数:80
评论数:155
访问量:129744
无忧币:961
博客积分:1486
博客等级:5
注册日期:2009-07-11

页面控件遍历
2009-08-24 13:01:54
标签:IT 休闲 职场
第一种,遍历this.Controls
代码如下:


foreach (Control ctl in this.Controls)
{ if (typeof(ctl)==typeof(TextBox)).

这样并不能遍历整个页面中的TextBox    

this.Controls只是包含了Page根一级的control,这样次级的control就都没有遍历    
TextBox一般会放在form里面,遍历this.Controls只会访问form control,而不会访问form的子contorl,其中的TextBox    
第二种,遍历Controls[1]
代码如下:


for(int     i=0;i<inPage.Controls[1].Controls.Count;i++)    
    {    
    if(inPage.Controls[1].Controls[i].GetType().ToString()=="System.Web.UI.WebControls.TextBox")        


同样的情况:


这种代码没有通用性,你怎么就知道Control[1]正是你要遍历的collection    
次级的control都没有遍历    
我认为正确的做法:使用递归对页面control树进行完全遍历,并对每一个control进行处理。递归算法如下:
传入page的this.Colletions    
对每一个contorl,如果contorl没有包含子control,进行处理。    
如果包含,递归调用这个函数处理子control    
代码:


        private void InitialControl(ControlCollection objControlCollection)
        {
                foreach (System.Web.UI.Control objControl in objControlCollection)
                {
                        if (objControl.HasControls())
                        {
                                InitialControl(objControl.Controls);
                        }
                        else
                        {
                                if (objControl is System.Web.UI.WebControls.TextBox)
                                {
                                        ((TextBox)objControl).Text = String.Empty;
                                }
                        }
                }
        }


void IterateThroughChildren(Control parent)     //遍历所有控件
        {
            foreach (Control c in parent.Controls)
            {
                if (c.GetType().ToString().Equals("System.Web.UI.WebControls.TextBox") &&
                            c.ID == null)                //找到所有新创建的TextBox控件(新创建的TextBox的ID为空,有别于页面中id="txtTBCount"的TextBox)
                {
                    ((TextBox) c).Text = "TextBox " + count.ToString(); //改变TextBox的属性。
                    ((TextBox) c).Columns = 10; //改变TextBox的属性
                    count++;     //count为全局变量,记录找到的TextBox数量
                }
                
                if (c.Controls.Count > 0)
                {                    
                    IterateThroughChildren(c);                    
                }
            }
        }

        void CreateTextBoxes(Object sender, EventArgs e) //按下按钮激活的事件
        {    
            if (!Page.IsValid) return;
            
            int n = Int32.Parse(txtTBCount.Text);             //取得用户输入的数字。
            //创建n个TextBox,并把它们加到PlaceHolder里面
             for (int i = 0; i < n; i++)
            {
                TextBoxesHere.Controls.Add(new TextBox());        
            }
            
            //遍历并设置每个TextBox的属性
            IterateThroughChildren(this);
        }

分享至
更多
一键收藏,随时查看,分享好友!
0人
了这篇文章
类别:ASP.NET MVC技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
 

发表评论            

【技术门诊】专家解析:软考重点难点及应试技巧
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: