在GridView中使用FindControl

DataRowView dv =(DataRowView)e.Row.DataItem;
string id=dv.Row["ProjectID"].ToString();

1、在行绑定(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";
        }
    }

2、在行命令(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);

  GridViewRow row = ((Button)e.CommandSource).Parent.Parent as GridViewRow;
Label lblnumber = (Label)row.Cells[5].FindControl("lblNumber");

}
    }

上一篇:Winform 生成不需要安装的exe可执行文件 ILMerge使用


下一篇:Javaweb学习笔记——(十七)——————JDBC的原理、四大核心类、四大参数、预编译、Dao模式、批处理、大数据、时间类型的转换