zoukankan      html  css  js  c++  java
  • 在GridView中使用FindControl(2)

    最近项目中用到FindControl和GridView,整理了一下几种使用方法,留作资料。  
      
    1、在选择(SelectedIndexChanged)事件中使用  
      
      
         //获得被选择行的TextBox1  
        protected void gv1_SelectedIndexChanged(object sender, EventArgs e)  
        {  
            //Control c = this.gv1.Rows[this.gv1.SelectedIndex].FindControl("TextBox1");  
            //TextBox tb = (TextBox)c;  
            //tb.Text = "TextBox";  
      
            TextBox tb = (TextBox)this.gv1.Rows[this.gv1.SelectedIndex].FindControl("TextBox1");  
            tb.Text = "hello";  
        }  
      
    2、在编辑行(RowEditing)事件中使用  
      
         
        //编辑行时,找到TextBox1  
        protected void gv1_RowEditing(object sender, GridViewEditEventArgs e)  
        {  
            //设置要编辑行的索引  
            gv1.EditIndex = e.NewEditIndex;  
            GridViewBind();  
      
            TextBox tb = (TextBox)this.gv1.Rows[e.NewEditIndex].FindControl("TextBox1");  
            Response.Write(tb.Text);  
        }  
      
      
    3、在取消编辑行(RowCancelingEdit)事件中使用  
      
        //取消编辑时,找到TextBox1  
        protected void gv1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)  
        {  
            TextBox tb = (TextBox)this.gv1.Rows[e.RowIndex].FindControl("TextBox1");  
            Response.Write(tb.Text);  
      
            gv1.EditIndex = -1;  
            GridViewBind();  
        }  
      
    4、在行绑定(RowDataBound)事件中使用  
      
          
      
        //获得行数据绑定中的TextBox1  
        protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e)  
        {  
            // 对于在RowDataBound中Find,可以用if (e.Row.RowType == DataControlRowType.DataRow)来限制Find的范围,因为Find默认是在HeaderTemplate中找,如果不限定范围,在HeaderTemplate中找不到,自然就返回null,然后就出错了,DataControlRowType枚举中的DataRow确定是数据行.  
            //if (e.Row.RowType == DataControlRowType.DataRow)  
            //{  
            //    TextBox tb = (TextBox)e.Row.FindControl("TextBox1");  
            //    tb.Text = "databind";  
            //}  
      
      
            //如果在DataGrid的页眉和页脚:  
      
            //if (e.Row.RowType == DataControlRowType.Header)  
            //{  
            //    TextBox tbheader = (TextBox)e.Row.FindControl("txtHeader");  
            //    tbheader.Text = "Head";  
            //}  
            ((TextBox)this.gv1.Controls[0].Controls[0].FindControl("txtHeader")).Text = "Head";  
      
            if (e.Row.RowType == DataControlRowType.Footer)  
            {  
                TextBox tbfooter = (TextBox)e.Row.FindControl("txtFooter");  
                tbfooter.Text = "Footer";  
            }  
        }  
      
    5、在行命令(RowCommand)事件中使用  
      
           
      
        //行命令时间中找到TextBox1  
        //如果使用GridView默认的模式,e.CommandArgument自动棒定为该行的Index,这时候只要指定gridview1.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("xxx")就可以了,但是如果转化为Template,e.CommandArgument并不会自动绑定任何值,需要手动绑定,可以在<ItemTemplate></ItemTemplate>手动写CommandArgument="<%# ((GridViewRow) Container).RowIndex %>",把这个行的 Index绑定绑定到该e.CommandArgument就可以了.  
        protected void gv1_RowCommand(object sender, GridViewCommandEventArgs e)  
        {  
            if (e.CommandName.ToLower() == "change")  
            {  
                TextBox tb = (TextBox)this.gv1.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("TextBox1");  
                  
                Response.Write(tb.Text);  
            }  
        }  
      
    其他事件中的使用,和上面列举的类似  
      
    附上,前台代码:UseTest3.aspx  
      
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="UseTest3.aspx.cs" Inherits="UseTest3" %>  
      
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
      
    <html xmlns="http://www.w3.org/1999/xhtml" >  
    <head runat="server">  
        <title>无标题页</title>  
    </head>  
    <body>  
        <form id="form1" runat="server">  
        <div>  
            <asp:GridView ID="gv1" runat="server" AutoGenerateColumns="False" OnSelectedIndexChanged="gv1_SelectedIndexChanged" OnRowEditing="gv1_RowEditing" OnRowDataBound="gv1_RowDataBound" ShowFooter="True" OnRowCommand="gv1_RowCommand" DataKeyNames="employeeid" OnRowCancelingEdit="gv1_RowCancelingEdit">  
            <Columns>  
            <asp:TemplateField>  
                <HeaderTemplate>  
                    <asp:TextBox ID="txtHeader" runat="Server"></asp:TextBox>  
                </HeaderTemplate>  
                <ItemTemplate>  
                    <asp:TextBox ID="TextBox1" Text='<%# Bind("employeeid")%>' runat="server"></asp:TextBox>               
                </ItemTemplate>  
                <FooterTemplate>  
                    <asp:TextBox ID="txtFooter" runat="server"></asp:TextBox>  
                </FooterTemplate>  
            </asp:TemplateField>  
            <asp:BoundField DataField="lastname" HeaderText="LastName" />  
            <asp:BoundField DataField="firstname" HeaderText="FirstName" />  
            <asp:ButtonField CommandName="select" Text="选择" />       
            <asp:ButtonField CommandName="change" Text="change" />  
                <asp:CommandField ShowEditButton="True" />  
            </Columns>  
            </asp:GridView>  
             </div>  
        </form>  
    </body>  
    </html>  
  • 相关阅读:
    jekins接通gitee的webhook做自动部署 vue、react、java、springBoot
    vue可复用性 & 组合
    vite使用短链接
    Ubuntu12.04(X86_64)上安装Mesa8.0.4
    回调函数
    c#隐式转换
    OpenGL ES2 的OffScreen实现
    Catch exception from other thread
    C# []、List、Array、ArrayList 区别及应用
    redhat update
  • 原文地址:https://www.cnblogs.com/YoungPop-Chen/p/3312901.html
Copyright © 2011-2022 走看看