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의 부분 자동 생성 클래스에 의해 컨트롤 ID가 자동으로 매핑되지 않습니다.
두 가지 솔루션이 있습니다.
템플릿의 내용을 USERCONTROL로 감싸십시오. UserControl의 CodeBehind는 다른 템플릿에 더 이상 중첩되지 않은 컨트롤에 대한 컴파일 타임 액세스 권한을 갖습니다. USERCONTROL과 포함하는 상위 템플릿 간의 상호 작용을 가능하게하려면 USERCONTROL에 이벤트 및 공개 속성을 노출시킵니다.
.findControl (String ControlID)을 사용하여 포함 된 컨트롤의 현재 템플릿을 "검색"하여 원하는 컨트롤을 찾으십시오. 어떤 것을 호출하려고 시도하기 전에 NULL에 대해 확인하고, 어떤 방법을 호출하려고하는지에 따라 적절한 유형으로 캐스팅되어 있는지 확인하십시오.