经常我们都会遇到这种情况,我们有控件的ID值,我们要取这个控件,取的方法很简单,就是使用FindControl方法
要分两种情况的:
嗯,我假设我要从一个GridView1里取他调用的SqlDataSource
1、没有使用母版页的时候很简单
2、使用了母版页,这里我找到方法,嗯,我不知道为什么可以这样做,我是测试代码测试出来的
这时的this已经不可以这样用了,查百度可以知道,很多都说是因为用了母版页,this指的不是整个页面,是母版页,说aspx页面里的控件是放在Content子控件里的,msdn还没查,我很害怕看文字的,我用代码测试了:
我在母版页里放了一个TextBox1控件,我用这两个代码测试
和
这时取到的mytb是null
我取Content1,也是取到null,我是想,因为Content1在解析完的时候,在html代码里是没有的,所以肯定取不到的
我想了一个办法,就是把GridView1放在一个runat="server"的table里
然后呢:
这样就可以正确取到数据源控件了
我一开始的时候以为自己解决问题了的,后来我想到这个东西很怪,我们要取GridView1的模版列里的值,我们要在GridView1.Rows[i]里取,就是我们取控件的时候,要在包含这个控件的控件里FindControl的,上面的那段代码,包含在TableList表格里的,是GridView1,不是SqlDataSource1,为什么我可以从TableList表格里取到SqlDataSource1?
我想不懂这个问题,在页面上不管哪里,放一个runat="server"的表格,就可以用这个表格FindControl页面上别的放在所有地方的控件了,控件不需要在表格里包含着,好怪啊
FindControl是怎么工作的呢?