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();
}
}
...o...
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án anidados en lo que WebForms llama NamingContainers. No puede acceder a estos controles porque se inyectan dinámicamente en tiempo de ejecución, sus identificaciones de control no están asignadas automáticamente por la clase parcial generada por el CodeBehind.
Hay 2 soluciones:
Envuelva el contenido de su plantilla en un UserControl. El CodeBehind de ese Usercontrol tendrá acceso a tiempo de compilación a cualquier control que no esté anidado en otras plantillas. Para habilitar la interacción entre el Usercontrol y la plantilla matriz que la contiene, exponga eventos y propiedades públicas en el UserControl
Use .FindControl (String ControlDID) para "buscar" las plantillas de corriente que contienen el control para encontrar el control que está buscando. Solo asegúrese de consultarlos contra NULL antes de tratar de invocarles cualquier cosa, y que sean lanzados al tipo apropiado en función de los métodos que pretende invocarlos.