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();
}
}
Come mai?
ItemTemplates, RowTemplates, Edittemplates, ecc. Non è possibile accedere a questi controlli perché sono iniettati dinamicamente in fase di esecuzione, i loro ID di controllo non sono automaticamente mappati dalla classe auto-generata dal codice bodehind.
Ci sono 2 soluzioni:
Avvolgi il contenuto del tuo modello in UserControl. Che il CODEBehind di UserControl avrà l'accesso a tempo di compilazione a eventuali controlli che non sono ulteriormente nidificati in altri modelli. Per consentire l'interazione tra UserControl e il modello principale che lo contiene, esporre eventi e proprietà pubbliche su UserControl
Usa .FindControl (String ControlID) per "cercare" i modelli di corrente del controllo contenenti per trovare il controllo che stai cercando. Assicurati solo di controllarli contro Null prima di provare a invocare qualsiasi cosa su di loro e che siano lanciati sul tipo appropriato in base ai metodi che intendi invocarli su di loro.