protected void viewHoursButton_OnClick(object sender, EventArgs e)
{
var viewHoursPopup = parentGridView.FindControl("viewHoursPopup")
as WebControl;
var viewHoursGridView = parentGridView.FindControl("viewHoursGridView");
if (viewHoursPopup != null && viewHoursGriView != null)
{
viewHoursPopup.Show();
viewHoursGridView.DataBind();
}
}
...ou...
protected void viewHoursButton_OnClick(object sender, EventArgs e)
{
var viewHoursButton = (Button)sender;
var viewHoursPopup = viewHoursButton.Parent.FindControl("viewHoursPopup")
as WebControl;
var viewHoursGridView = viewHoursButton.Parent.FindControl("viewHoursGridView");
if (viewHoursPopup != null && viewHoursGriView != null)
{
viewHoursPopup.Show();
viewHoursGridView.DataBind();
}
}
Por quê?
ItemTemplates, RowTemplates, Edittemplates, etc, estão todos aninhados em quais WebForms chamam de concursos de nome. Você não pode acessar esses controles porque eles são injetados dinamicamente em tempo de execução, seus IDs de controle não são mapeados automaticamente pela classe parcial gerada automaticamente do CodeBehind.
Existem 2 soluções:
Enrole o conteúdo do seu modelo em um UserControl. Que o código CodeBehind da UserControl terá acesso ao tempo de compilação a quaisquer controles que não estejam mais aninhados em outros modelos. Para permitir a interação entre o UserControl e o modelo pai que o contém, exponha eventos e propriedades públicas no UserControl
Use .FindControl (String ControlId) para "pesquisar" os modelos atuais do Control Control para encontrar o controle que você está procurando. Certifique -se de verificar contra NULL antes de tentar invocar qualquer coisa sobre eles e que eles sejam lançados para o tipo apropriado com base nos métodos que você pretende invocar sobre eles.