FindControl的使用方法
Control.FindControl (String):在当前的命名容器中搜索带指定 id参数的服务器控件。(有点类似javascript中的getElementById(string))
简单的例子:
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server">TextBox</asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
</form>
如果需要获得页面中的"TextBox1",代码中可以使用this.TextBox1来引用,这里我们使用FindControl:
protected void Button1_Click(object sender, EventArgs e)
{
//Control c = this.FindControl("TextBox1");
//TextBox tb= (TextBox)c;
//FindControl返回的是一个Control类型的控件,需要强制类型转化成TextBox类型
TextBox tb=(TextBox)this.FindControl("TextBox1");
this.Label1.Text = tb.Text;
}
当TextBox1放到其他控件里应该怎么查找呢?
<div>
<asp:Panel ID="Panel1" runat="server" Height="50px" ;125px">
<asp:TextBox ID="TextBox1" runat="server">TextBox</asp:TextBox>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</asp:Panel>
</div>
当TextBox1放到Panel里,似乎没什么影响 TextBox tb=(TextBox)this.FindControl("TextBox1"),
当查看生存页面的HTML代码是发现,TextBox的ID并没有改变,所以可以获得TextBox1。
<div>
<div id="Panel1" style="height:50px;;">
<input name="TextBox1" type="text" value="TextBoxdsd" id="TextBox1" />
<span id="Label1">TextBoxdsd</span>
<input type="submit" name="Button1" value="Button" id="Button1" />
</div>
</div>
当TextBox1放到DataGrid中
<asp:DataGrid ID="dg1" runat="server" OnSelectedIndexChanged="dg1_SelectedIndexChanged">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:ButtonColumn CommandName="Select" Text="选择"></asp:ButtonColumn>
</Columns>
</asp:DataGrid>
这时候this.FindControl("TextBox1")==null,无法获得TextBox1,查看生成页面HTML发现,页面有多个
<input name="dg1$ctl02$TextBox1" type="text" id="dg1_ctl02_TextBox1" />
<input name="dg1$ctl03$TextBox1" type="text" id="dg1_ctl03_TextBox1" />
TextBox1隐藏了,给DataGrid添加选择列,通过以下方法获得被选择行的TextBox1
protected void dg1_SelectedIndexChanged(object sender, EventArgs e)
{
Control c = this.dg1.Items[this.dg1.SelectedIndex].FindControl("TextBox1");
//Control c = this.dg1.SelectedItem.FindControl("TextBox1");
TextBox tb = (TextBox)c;
tb.Text = "TextBox";
}
protected void dg1_EditCommand(object source, DataGridCommandEventArgs e)
{
TextBox tb = (TextBox)e.Item.FindControl("TextBox1");
this.Label1.Text = tb.Text.ToString();
}
如果是在DataGrid的页眉和页脚:
((TextBox)this.dg1.Controls[0].Controls[0].FindControl("TextBoxH")).Text = "Head";
((TextBox)this.dg1.Controls[0].Controls[this.dg1.Controls[0].Controls.Count -1].FindControl("TextBoxF")).Text = "Footer";
TextBox1在Repeater中
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnItemCommand="Repeater1_ItemCommand">
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text=""></asp:TextBox><%#DataBinder.Eval(Container.DataItem,"ProductName")%>
<asp:Button ID="btn"OnClick="btn_click" runat="server" Text="dddd" /><br />
</ItemTemplate>
</asp:Repeater>
通过按钮来获得TextBox1:
protected void btn_click(object sender, EventArgs e)
{
//获得按钮
Button btn = (Button)sender;
TextBox tb = (TextBox)btn.Parent.FindControl("TextBox1");
tb.Text = "Text";
}
或者
foreach (RepeaterItem item in this.Repeater1.Items)
{
((TextBox)item.FindControl("TextBox1")).Text = "Text2";
}
自定义控件里的TextBox1
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
引用<uc1:WebUserControl ID="WebUserControl1" runat="server" />
获取TextBox1:
((TextBox)this.WebUserControl1.FindControl("TextBox1")).Text = "userc";
模板页访问页面TextBox1
//模板页的TextBox1
TextBox tbM = (TextBox)this.FindControl("TextBox1");
//页面中的TextBox1
TextBox tbC = (TextBox)this.FindControl("ContentPlaceHolder1").FindControl("TextBox1");
tbC.Text = tbM.Text;
页面使用模板页的TextBox1
//模板页的TextBox1
TextBox tbM = (TextBox)Master.FindControl("TextBox1");
//本页面的TextBox1
//错误的方法:TextBox tbC = (TextBox)this.FindControl("TextBox1");
TextBox tbC = (TextBox)Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1");
tbM.Text = tbC.Text.ToString();
FindControl的使用方法的更多相关文章
- WebForm FindControl的使用方法
Control.FindControl (String):在当前的命名容器中搜索带指定 id参数的服务器控件. 有点类似javascript中的getElementById(string); 简单的例 ...
- C# 中 FindControl 方法及使用
FindControl 的使用方法 FindControl (String id): 在页命名容器中搜索带指定标识符的服务器控件.(有点类似javascript中的getElementById(st ...
- Page.FindControl(string id) 与母版页结合后发现的一个问题
MSDN上解释Page.FindControl(string id)方法用于查找指定ID的控件.例如: <asp:TextBox id="Email" runat=" ...
- Asp.Net 之 MasterPage
母版页是VS2005中新引入的一个概念,它很好地实现界面设计的模块化,并且实现实现了代码的重用.它就像婚纱影楼中的婚纱模板,同一个婚纱模板可以给不同的新人用,只要把他们的照片贴在已有的婚纱模板就可以形 ...
- asp.net 母版页使用详解--转
http://www.cnblogs.com/_zjl/archive/2011/06/12/2078992.html 母版页是VS2005中新引入的一个概念,它很好地实现界面设计的模块化,并且实现实 ...
- step_by_step_G+入门-在线服务
第一步:先大概介绍下我们的窗体的布局框架,窗体大体分为以下3大块: 顶部:也就是大的模块划分(比如首页,软件管家,在线服务等) 内容区域:根据选择的不同的顶部模块,进行不同的内容展示: 底部:设置,下 ...
- asp.net 母版页使用详解
母版页是VS2005中新引入的一个概念,它很好地实现界面设计的模块化,并且实现实现了代码的重用.它就像婚纱影楼中的婚纱模板,同一个婚纱模板可以给不同的新人用,只要把他们的照片贴在已有的婚纱模板就可以形 ...
- nim_duilib(3)之按钮
introduction 更多控件用法,请参考 here 和 源码. 本文的代码基于这里 lets go xml文件添加代码 下面的xml文件内容,删除label控件的相关代码,增加了3个按钮. 其中 ...
- javaSE27天复习总结
JAVA学习总结 2 第一天 2 1:计算机概述(了解) 2 (1)计算机 2 (2)计算机硬件 2 (3)计算机软件 2 (4)软件开发(理解) 2 (5) ...
随机推荐
- Tomcat设置最佳线程数总结
最佳线程数: 性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或者增加不明显,同时请求的响应时间却大幅增加.这个阀值我们认为是最佳线程数. 为 ...
- 谢尔排序/缩减增量排序(C++)
谢尔排序/缩减增量排序(C++) 谢尔排序/缩减增量排序: 他通过比较相距一定间隔的元素来工作,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止.(好复杂) 看了一下实现代 ...
- jQuery实现公告文字左右滚动的代码。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- jQuery慢慢啃筛选(四)
1.eq(index|-index) 获取第N个元素 其中负数:一个整数,指示元素的位置,从集合中的最后一个元素开始倒数.(1算起) $("p").eq(1)//获取匹配的第二个元 ...
- jQuery慢慢啃之核心(一)
1. $("div > p"); div 元素的所有p子元素. $(document.body).css( "background", "bla ...
- 关于Weblogic 10.3.1集群及调优经历
一. 集群 ·集群易于管理.灵活的负载平衡.较强的安全机制 ·配置前的规划 操作系统 硬件配置 角色 windows IP: 192.168.1.101:7001 AdminServer windo ...
- MySQL数据库服务器 主从配置
A B 为两台 MySQL 服务器,均开启二进制日志,数据库版本 MySQL 5.5 一.服务器参数 [A 服务器 192.168.1.100] server-id = 1 binlog-do-d ...
- C#DataTable操作
] 在DataSet中添加DataTable DataSet.Tables.Add(DataTable) 实例: DataSet ds=new DataSet(); DataTable table=n ...
- 绑定下拉框时避免触发SelectedIndexChanged事件
在从数据库读取数据集绑定到下拉框时会立即触发其SelectedIndexChanged事件造成异常,可对其SelectedIndexChanged事件采取先解除后附加的方法解决. cmbXl_gt.V ...
- Node 之 Express 学习笔记 第二篇 Express 4x 骨架详解
周末,没事就来公司加班继续研究一下Express ,这也许也是单身狗的生活吧. 1.目录结构: bin, 存放启动项目的脚本文件 node_modules, 项目所有依赖的库,以及存放 package ...