C# RowDataBound事件上的Find控件返回为NULL/Empty
我试图使用FindControl从GridView中获取所选行的文本值,但FindControl始终返回NULL .ASPX代码: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
有没有人能指出我做错了什么,或者有没有其他方法?单击“选择”按钮时,我想从上面的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;
}
}