动态创建的元素的服务器控件的事件处理

时间:2012-10-02 08:40:12

标签: asp.net gridview servercontrols

我正在创建继承自GridVew的服务器控件。 我有一些在控件内动态创建的图像按钮,对于每个按钮我都有一些事情可以做某事。 一切看起来都不错,但事件永远不会被触发。 这是我的代码的一部分:

//Class with dynamically created elements (custom grid pager)
public class GridPager
{
     public event CommandEventHandler PageNumberClick;

     //Element creation inside for scope
     for(....)
     {
        ImageButton img = new ImageButton();
        img.ImageAlign = ImageAlign.AbsMiddle;
        img.ID = "lnkLastPage" + i.ToString();
        img.CommandName = "Page";
        img.CommandArgument = ((totalPages - 1) * maxPageRows).ToString();
        imgBtn.Command += new CommandEventHandler(PageNumberClick);            
        tableCell.Controls.Add(img);
     }
}

public class MyGridControl : GridView  
{
    [Bindable(true)]
    [Category("Appearance")]
    [DefaultValue("")]
    [Localizable(true)]

    GridPager.PageNumberClick += new CommandEventHandler(lnkPage_Click);

    void lnkPage_Click(object sender, CommandEventArgs e)
    {
       PageIndex = Int32.Parse(e.CommandArgument.ToString());
       BindData();
    }
}

1 个答案:

答案 0 :(得分:0)

您需要重新创建动态控件on every postback - 请记住每次回发都会创建一个新的页面类实例,因此您需要重新创建上一次创建的动态控件。

请参阅this article

and this one