您所在的位置: 程序员家园 -> 家园博客 ->
 
在哪里摔倒
就在哪里自己爬起来

用户登录

查  找

最新评论

最新留言

常用网站

网易邮箱 GMAIL  

百度搜索 MSDN

霏凡软件 BT精品

影视帝国 射 手 网

电驴下载 全 库 网

友情连接

茄菲的窝 冰冰博客

枫叶飘零 玫  瑰

ACEN 云 豹 子

统  计



根据控件id取控件 
狼子 发表于 2007-1-1 13:24:00 阅读全文 | 回复(0) | 引用通告 | 编辑  asp.net查看本站使用过本标签的日志查看本站使用过本标签的用户

经常我们都会遇到这种情况,我们有控件的ID值,我们要取这个控件,取的方法很简单,就是使用FindControl方法

要分两种情况的:

嗯,我假设我要从一个GridView1里取他调用的SqlDataSource

1、没有使用母版页的时候很简单

SqlDataSource mysds = new SqlDataSource();
mysds = (SqlDataSource)this.FindControl(GridView1.DataSourceID);

2、使用了母版页,这里我找到方法,嗯,我不知道为什么可以这样做,我是测试代码测试出来的

这时的this已经不可以这样用了,查百度可以知道,很多都说是因为用了母版页,this指的不是整个页面,是母版页,说aspx页面里的控件是放在Content子控件里的,msdn还没查,我很害怕看文字的,我用代码测试了:

我在母版页里放了一个TextBox1控件,我用这两个代码测试

TextBox mytb = new TextBox();
mytb = (TextBox)this.FindControl("TextBox1");

TextBox mytb = new TextBox();
mytb = (TextBox)Master.FindControl("TextBox1");

这时取到的mytb是null

我取Content1,也是取到null,我是想,因为Content1在解析完的时候,在html代码里是没有的,所以肯定取不到的

我想了一个办法,就是把GridView1放在一个runat="server"的table里

<table border="0" runat="server" ID="TableList">
<tr><td>
<asp:GridView ID="GridView1" runat="server" ……></asp:GridView>
</td></tr>
</table>

然后呢:

SqlDataSource mysds = new SqlDataSource();
mysds = (SqlDataSource)TableList.FindControl(GridView1.DataSourceID);

这样就可以正确取到数据源控件了

我一开始的时候以为自己解决问题了的,后来我想到这个东西很怪,我们要取GridView1的模版列里的值,我们要在GridView1.Rows[i]里取,就是我们取控件的时候,要在包含这个控件的控件里FindControl的,上面的那段代码,包含在TableList表格里的,是GridView1,不是SqlDataSource1,为什么我可以从TableList表格里取到SqlDataSource1?

我想不懂这个问题,在页面上不管哪里,放一个runat="server"的表格,就可以用这个表格FindControl页面上别的放在所有地方的控件了,控件不需要在表格里包含着,好怪啊

FindControl是怎么工作的呢?

发表评论:

    昵称:
    密码:
    主页:
    标题:
Powered by Oblog.