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();
}
}
...oder...
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();
}
}
Wieso den?
ItemTemplates, rowtemplates, edittemplates usw. sind in dem, was WebForms namingContainer nennt, verschachtelt. Sie können auf diese Steuerelemente nicht zugreifen, da sie zur Laufzeit dynamisch injiziert werden. Ihre Steuer-IDs werden nicht automatisch von der teilweise automatisch generierten Klasse des Codebehinds abgebildet.
Es gibt 2 Lösungen:
Wickeln Sie den Inhalt Ihrer Vorlage in eine UserControl. Das Codebehind von UserControl hat den Zugang zu den Kontrollen, die nicht weiter in andere Vorlagen eingebaut sind. Um die Interaktion zwischen der UserControl und der übergeordneten Vorlage zu ermöglichen, die sie enthält, entlarvt Ereignisse und öffentliche Eigenschaften auf der UserControl
Verwenden Sie .FindControl (String ControlID), um die aktuellen Vorlagen des Steuerelements zu durchsuchen, um die gesuchte Steuerung zu finden. Überprüfen Sie sie nur gegen Null, bevor Sie versuchen, etwas auf sie aufzurufen, und dass sie auf den entsprechenden Typ gegossen werden, basierend auf welchen Methoden, die Sie auf sie aufrufen möchten.