0

グリッドビューでコントロール(ハイパーリンク)を見つけたいです。コントロールの値に基づいて、ハイパーリンクを有効または無効にしたいと考えています。私はこのようにしてみました。しかし、私は常にnullになっています。

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; 
        }
    }
}

助けてください。

4

2 に答える 2

2

あなたの「id」値は非常に疑わしいです。私のお金は、あなたが間違ったコントロール名を指定しているという事実にあります:FindControl("id!!!!!!!")

私は次のようなものを見ることを期待します:

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

実際に正しいコントロール名(yuck)を指定している場合は、ハイパーリンクコントロールがネストされすぎている可能性があります。その場合は、コントロール階層を「クロール」して探します。

于 2012-06-22T21:37:49.203 に答える
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
    }
于 2012-06-22T22:21:04.850 に答える