zoukankan      html  css  js  c++  java
  • FINDCONTROL的详细介绍

    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();

  • 相关阅读:
    思维科学的层次和学科构成
    知识管理--要对自己的知识做顶层的梳理和管理
    深入分析泛型编程--编译器使用模版生成代码
    算法与上下文
    深入理解递归算法
    什么是递归:递 与 归
    分治与”分析与综合”
    分治的逻辑学描述
    分治与递归
    generator的本质是将异步的管理剥离
  • 原文地址:https://www.cnblogs.com/12go/p/2264853.html
Copyright © 2011-2022 走看看