C# RowDataBound事件上的Find控件返回为NULL/Empty

C# RowDataBound事件上的Find控件返回为NULL/Empty,c#,asp.net,gridview,findcontrol,C#,Asp.net,Gridview,Findcontrol,我试图使用FindControl从GridView中获取所选行的文本值,但FindControl始终返回NULL .ASPX代码: 有没有人能指出我做错了什么,或者有没有其他方法?单击“选择”按钮时,我想从上面的GridView中获取CountryName的值。正如上面的@AlexKurryashev注释所示,您必须从GridView的EditTemplate模式中检查/查找控件: protected void GridView1_RowDataBound(object sender, Grid

我试图使用FindControl从GridView中获取所选行的文本值,但FindControl始终返回NULL

.ASPX代码:


有没有人能指出我做错了什么,或者有没有其他方法?单击“选择”按钮时,我想从上面的GridView中获取CountryName的值。

正如上面的@AlexKurryashev注释所示,您必须从GridView的EditTemplate模式中检查/查找控件:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // check if its not a header or footer row
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // check if its in a EditTemplate
        if (e.Row.RowState == DataControlRowState.Edit)
        {
            TextBox txt = e.Row.FindControl("TextBox1") as TextBox;
            string name = txt.Text;
        }
    }
}
或 您可以使用OnRowCommand事件从选择按钮中获取值,如下所示:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Select")
    {
        // get row where clicked
        GridViewRow row = (GridViewRow)(((Button)e.CommandSource).NamingContainer);

        Label txt = row.FindControl("Label1") as Label;
        string name = txt.Text;
    }
}

谢谢你们两位!我能够从ItemTemplate获取数据。但这次我用了一个不同的事件

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        {
            Label txt = GridView1.SelectedRow.FindControl("Label1") as Label;
            string name = txt.Text;
            Label2.Text = name;

            Session["Name"] = name;
            Response.Redirect("check.aspx");
        }
    }

通过使用此代码,我能够从Item HeaderTemplate获取数据

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    {
        GridViewRow headerrow = GridView1.HeaderRow;
        DropDownList ddlId = (DropDownList)headerrow.Cells[0].Controls[1].FindControl("ddlId ");
        string headerid = ddlId.SelectedValue; 
    }
}
ID=TextBox1的控件仅在EditItemTemplate中。请尝试e.Row.RowState==DataControlRowState.Edit。或者为文本框和标签提供相同的ID。
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        {
            Label txt = GridView1.SelectedRow.FindControl("Label1") as Label;
            string name = txt.Text;
            Label2.Text = name;

            Session["Name"] = name;
            Response.Redirect("check.aspx");
        }
    }
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    {
        GridViewRow headerrow = GridView1.HeaderRow;
        DropDownList ddlId = (DropDownList)headerrow.Cells[0].Controls[1].FindControl("ddlId ");
        string headerid = ddlId.SelectedValue; 
    }
}