Это зависит от того, где вы находитесь на жизненном цикле страницы. DataList использует шаблоны ASP.NET для создания своей коллекции внутреннего контроля, этого не произойдет, пока вы не вызовете DataBind
, что обычно происходит автоматически перед PreRender
. И вы не можете найти элементы управления в коллекции элементов управления, пока они не будут созданы.
Где на жизненном цикле страницы вы это делаете? Какой контекст? Есть и другие вещи, которые могут еще больше усложнить это (одна вещь - FindControl не является рекурсивной) в том, что он не обязательно будет искать в каждом контейнере именования. Но я хотел бы узнать больше о том, в каком контексте это не работает, потому что это работает, но вы должны быть осторожны.
EDIT:
Что-то вроде этого должно сработать:
<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!";
}