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();
}
}
...أو...
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();
}
}
لماذا ا؟
تتداخل itemTemplates و Rowtemplates و Edittemplates ، إلخ ، فيما يطلق عليه WebForms NamingContainers. لا يمكنك الوصول إلى عناصر التحكم هذه لأنها يتم حقنها ديناميكيًا في وقت التشغيل ، لا يتم تعيين معرف التحكم الخاص بهم تلقائيًا بواسطة فئة CodeBehind الجزئية التي تم إنشاؤها تلقائيًا.
هناك حلولان:
لف محتوى القالب الخاص بك في UserControl. أن CodeBehind من UserControl سيكون لها وصول وقت التجميع إلى أي عناصر تحكم لم يتم تداخلها في قوالب أخرى. لتمكين التفاعل بين USERCONTROL والقالب الأم الذي يحتوي عليه ، فضح الأحداث والخصائص العامة على USERCONTROL
استخدم .findcontrol (سلسلة ControlId) لـ "البحث" في القوالب الحالية التي تحتوي على عنصر تحكم للعثور على عنصر التحكم الذي تبحث عنه. فقط تأكد من التحقق منها ضد NULL قبل محاولة استدعاء أي شيء عليها ، وأن يتم إلقاؤها على النوع المناسب بناءً على الأساليب التي تنوي التذرع بها.