3

I'm creating server control that inherits from GridVew. I have some image buttons that created dynamically inside the control, for each button I have event that suppose to do something. Everything looks nice but the event is never triggered. Here is part of my code:

//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();
    }
}
Furqan Safdar
  • 16,260
  • 13
  • 59
  • 93

1 Answers1

0

You need to recreate your dynamic controls on every postback - remember a new class instance of your page is created every postback, so any dynamic controls you created the previous time will need to be recreated.

see this article

and this one

Community
  • 1
  • 1
Richard Friend
  • 15,800
  • 1
  • 42
  • 60