反射遍历textbox

大中午的挺困,那就听会歌,记录下上午的东西吧。

还是昨天上传文件的那个页面,在上传文件的同时需要对一些信息进行记录,上传完之后就需要将所填写的内容进行清空了。(用的是textbox)

其实这是可以用javascript处理的,而且是在客户端,对服务器的压力就小了,作为练习么,就选在服务器进行处理了。

遍历页面上所有的控件,判断其实不是textbox,是的话就将其值赋为空。

 private void Clear()
        {
            
foreach (Control control in this.FindControl("form1").Controls)
            {
                
if (control is TextBox)
                {
                    ((TextBox)control).Text 
= string.Empty;
                    
// Clear(control.Controls);
                }
            }
        }

 

这个思路是最最容易想到的,当然在网上看同类问题的时候,发现了也有用反射来解决的,虽说对于一个简单的遍历,使用反射的效率不一定会高,但是本着学习的目的,也试着学习学习吧~最近刚好不是在看张子洋的反射系列文章么,刚好。

 

  private void Clear2()
        {
            Type t 
= typeof(TextBox);
            FieldInfo[] infos 
=this.GetType().GetFields(BindingFlags.GetField|BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance);
            
for (int i = 0; i < infos.Length; i++)
            {
                
if (infos[i].FieldType.Name == t.Name)
                {
                    ((TextBox)infos[i].GetValue(
this)).Text = string.Empty;
                }
            }
        }

首先获得TextBox的类型,然后是获得当前实例中的type,使用绑定约束,搜索当前为System.type定义的字段,同时存于infos数组中

然后是进入遍历数组,判断其是不是textbox的类型,是的话就变化其值。这个东西,还只能算是懵懵懂懂的,还是有待研究。

功能是实现了,不是彻底的掌握

posted @ 2009-11-05 13:49  Tmac_  阅读(202)  评论(0)    收藏  举报