ページのライフサイクルのどこにいるかによって異なります。DataList は、ASP.NET テンプレートを使用して内部コントロール コレクションを構築します。これは、 を呼び出すまで発生しません。DataBind
これは通常、 の直前に自動的に発生しますPreRender
。また、作成されるまで、コントロール コレクション内のコントロールを見つけることはできません。
ページのライフサイクルのどこでこれを行っていますか? 文脈は何ですか?これをさらに複雑にする可能性があるものは他にもあります (FindControl は再帰的ではないことが 1 つあります)。これは、すべての名前付けコンテナーを必ずしも検索するわけではありません。しかし、これがどのような状況で機能しないかについてもっと知りたいのですが、それは機能するからです。ただし、注意が必要です。
編集:
このような何かがうまくいくはずです:
<asp:DataList runat="server" ID="DataList1" OnPreRender="DataList1_PreRender">...</asp:DataList>
そして、コードビハインド:
protected void DataList1_PreRender(object sender, EventArgs e)
{
// the sender in this case is the DataList1 control
// i often prefer to rely on the sender argument
Label label1 = (Label)((Control)sender).FindControl("Label1");
label1.Text = "Yay, it looks like this works!";
}