无法在gridview中找到控件

时间:2012-06-22 21:26:35

标签: c# asp.net gridview findcontrol templatefield

我想在gridview中找到控件(超链接)。基于我想要启用或禁用超链接的控件的值。 我试过这样的。但我总是变得无效。

protected void gridResult_RowDataBound(object sender, GridViewRowEventArgs e) { 
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        HyperLink  status = e.Row.FindControl("id") as HyperLink;
        if ( status != null && status.Text == "AAAA" ) {
            status.Enabled = false; 
        }
    }
}

请帮忙。

2 个答案:

答案 0 :(得分:2)

您的“id”值非常可疑。我的钱是因为您提供了错误的控制名称:FindControl("id!!!!!!!")

我希望看到类似的东西:

HyperLink  status = e.Row.FindControl("hlStatus") as HyperLink;

如果您确实提供了正确的控件名称(yuck),那么可能是您的超链接控件嵌套太深,在这种情况下,您需要“抓取”您的控件层次结构以查找它。

答案 1 :(得分:0)

@dlev是绝对正确的,控件通常是嵌套的,因此您需要创建自己的各种函数来查找您要查找的内容,您可以将此函数传递给您的控件集合(e.Row.Controls())和您的ID

    private HyperLink FindControl(ControlCollection page, string myId)
    {
        foreach (Control c in page)
        {
            if ((HyperLink)c.ID == myId)
            {
                return (HyperLink)c;
            }
            if (c.HasControls())
            {
                FindControl(c.Controls, myId);
            }
        }
        return null; //may need to exclude this line
    }