开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 3794|回复: 1

FindControl和GridView的几种使用方法

[复制链接]

0

精华

0

贡献

0

赞扬

帖子
26
软币
182
在线时间
16 小时
注册时间
2015-8-7
发表于 2015-8-12 11:46:44 | 显示全部楼层 |阅读模式
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);  
        }  
    }  
  
其他事件中的使用,和上面列举的类似  

评分

参与人数 1赞扬 +1 收起 理由
zhijun + 1 赞一个

查看全部评分

回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-5-17 11:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表