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と呼ぶものにネストされています。これらのコントロールは、実行時に動的に注入されるため、コントロールIDがCodeBehindの部分自動生成クラスによって自動的にマッピングされないため、アクセスできません。
2つの解決策があります。
テンプレートのコンテンツをusercontrolに巻き付けます。 UserControlのCodeBehindは、他のテンプレートにさらにネストされていないコントロールへのタイムアクセスをコンパイルします。それを含むusercontrolとそれを含む親テンプレートとの間の相互作用を有効にするために、usercontrolでイベントとパブリックプロパティを公開する
.FindControl(String ControlID)を使用して、コンテンディングコントロールの現在のテンプレートを「検索」して、探しているコントロールを見つけます。それらに何かを呼び出す前に、ヌルに対してそれらを確認し、それらがそれらに呼び出そうとする方法に基づいて適切なタイプにキャストされることを必ず確認してください。