在GridView中使用FindControl

               

最近项目中用到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>

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/kahncc/article/details/87862802