如何在继承模板的类中向控件添加事件处理程序

时间:2011-04-27 03:34:38

标签: c# asp.net itemplate

我已经制作了一个模板,用于将控件添加到我从后面的代码中获得的详细信息。

private class edgFooterTemplate : ITemplate
{
    private Button btn_Edit;

    public void InstantiateIn(Control container)
    {
        btn_Edit = new Button();
        btn_Edit.CausesValidation = false;
        btn_Edit.CommandName = "Edit";
        btn_Edit.ID = "btn_Edit";
        btn_Edit.Text = "Edit";
        container.Controls.Add(btn_Edit);
    }
}

我的问题是我想在控件上添加一个事件处理程序,但是我也无法在代码隐藏的DetailsView中访问btn_Edit。

1 个答案:

答案 0 :(得分:2)

您可以启动编辑按钮,例如在模板构造函数中,将编辑点击事件添加到模板中:

private class edgFooterTemplate : ITemplate
{
    private Button btn_Edit;

    public edgFooterTemplate()
    {
        btn_Edit = new Button();
        btn_Edit.CausesValidation = false;
        btn_Edit.CommandName = "Edit";
        btn_Edit.ID = "btn_Edit";
        btn_Edit.Text = "Edit";
    }

    public event EventHandler EditClick
    {
        add { this.btn_Edit.Click += value; }
        remove { this.btn_Edit.Click -= value; }
    }

    public void InstantiateIn(Control container)
    {
        if (container != null)
        {
            container.Controls.Add(btn_Edit);
        }
    }
}

然后从后面的代码中使用它:

protected void Page_Init(object sender, EventArgs e)
{
    var footerTemplate = new edgFooterTemplate();
    footerTemplate.EditClick += new EventHandler(footerTemplate_EditClick);
    viewItems.FooterTemplate = footerTemplate;
}

,最后是事件处理程序:

protected void footerTemplate_EditClick(object sender, EventArgs e)
{
    // some logic here
}