UpdatePanel and RecreateChildControls

Discussion in 'ASP .Net Web Controls' started by jeljeljel, Sep 20, 2007.

  1. jeljeljel

    jeljeljel Guest

    I have a CompositeControl (called SimplePager) that creates an
    UpdatePanel in its CreateChildControls override. The CompositeControl
    uses two LinkButtons to control the forward/backward state. W/out the
    use of the UpdatePanel it works just great. However, as a learning
    exercise I want to AJAXify the control. I am placing the entire
    control in an UpdatePanel. During the link click event handler, I
    make a call to RecreateChildControls() which throws an exception.

    This is so close to working. Can someone suggest how to accomplish
    what I am trying to do with an UpdatePanel?

    My class is copied below.

    Thanks,
    John


    public class SimplePager : CompositeControl
    {
    private int _currentRecord;
    private int _totalRecords;

    public SimplePager(int totalRecords)
    {
    _totalRecords = totalRecords;
    _currentRecord = 1;
    }

    protected override void OnInit(EventArgs e)
    {
    Page.RegisterRequiresControlState(this);

    EnsureChildControls();

    base.OnInit(e);
    }

    protected override void LoadControlState(object savedState)
    {
    int[] state;

    state = (int[])savedState;

    _currentRecord = state[0];
    _totalRecords = state[1];
    }

    protected override object SaveControlState()
    {
    int[] state;

    state = new int[] { _currentRecord, _totalRecords };

    return state;
    }

    protected override void CreateChildControls()
    {
    HtmlGenericControl div;
    LinkButton linkButton;
    UpdatePanel updatePanel;
    Label label;

    div = new HtmlGenericControl("div");
    Controls.Add(div);

    updatePanel = new UpdatePanel();
    updatePanel.ID = this.ID + "BWPagerUpdatePanel";
    updatePanel.ChildrenAsTriggers = true;
    updatePanel.UpdateMode =
    UpdatePanelUpdateMode.Conditional;
    div.Controls.Add(updatePanel);

    linkButton = new LinkButton();
    linkButton.Text = "<< prev";
    linkButton.ID = "prevPage";
    linkButton.Click += new EventHandler(linkButton_Click);

    updatePanel.ContentTemplateContainer.Controls.Add(linkButton);

    linkButton = new LinkButton();
    linkButton.Text = "next >>";
    linkButton.ID = "nextPage";
    linkButton.Click += new EventHandler(linkButton_Click);

    updatePanel.ContentTemplateContainer.Controls.Add(linkButton);

    label = new Label();
    label.ID = "SimplePagerTextBox";
    label.Text = String.Format("&nbsp;&nbsp;Page {0} of {1}",
    _currentRecord, _totalRecords);
    updatePanel.ContentTemplateContainer.Controls.Add(label);

    base.CreateChildControls();
    }

    private void linkButton_Click(object sender, EventArgs e)
    {
    LinkButton linkButton = sender as LinkButton;

    if (PageChange != null)
    {
    switch (linkButton.ID)
    {
    case "prevPage":
    if (_currentRecord > 1)
    _currentRecord--;
    break;

    case "nextPage":
    if (_currentRecord < _totalRecords)
    _currentRecord++;
    break;
    }

    PageChange(this, _currentRecord);

    RecreateChildControls();
    }
    }

    public int CurrentRecord
    {
    get
    {
    return _currentRecord;
    }
    }

    public delegate void PageChangeEvent(object sender, int
    newPage);
    public event PageChangeEvent PageChange;
    }
    jeljeljel, Sep 20, 2007
    #1
    1. Advertising

  2. jeljeljel

    Phil H Guest

    Dear jeljeljel

    You make a call to RecreateChildControls() but no such method exists
    in the code you present.

    It's difficult to diagnose why a method is raising an exception if its
    code is not shown. Or could that be the cause of the problem?


    On 20 Sep, 18:17, jeljeljel <> wrote:
    > I have a CompositeControl (called SimplePager) that creates an
    > UpdatePanel in its CreateChildControls override. The CompositeControl
    > uses two LinkButtons to control the forward/backward state. W/out the
    > use of the UpdatePanel it works just great. However, as a learning
    > exercise I want to AJAXify the control. I am placing the entire
    > control in an UpdatePanel. During the link click event handler, I
    > make a call to RecreateChildControls() which throws an exception.
    >
    > This is so close to working. Can someone suggest how to accomplish
    > what I am trying to do with an UpdatePanel?
    >
    > My class is copied below.
    >
    > Thanks,
    > John
    >
    > public class SimplePager : CompositeControl
    > {
    > private int _currentRecord;
    > private int _totalRecords;
    >
    > public SimplePager(int totalRecords)
    > {
    > _totalRecords = totalRecords;
    > _currentRecord = 1;
    > }
    >
    > protected override void OnInit(EventArgs e)
    > {
    > Page.RegisterRequiresControlState(this);
    >
    > EnsureChildControls();
    >
    > base.OnInit(e);
    > }
    >
    > protected override void LoadControlState(object savedState)
    > {
    > int[] state;
    >
    > state = (int[])savedState;
    >
    > _currentRecord = state[0];
    > _totalRecords = state[1];
    > }
    >
    > protected override object SaveControlState()
    > {
    > int[] state;
    >
    > state = new int[] { _currentRecord, _totalRecords };
    >
    > return state;
    > }
    >
    > protected override void CreateChildControls()
    > {
    > HtmlGenericControl div;
    > LinkButton linkButton;
    > UpdatePanel updatePanel;
    > Label label;
    >
    > div = new HtmlGenericControl("div");
    > Controls.Add(div);
    >
    > updatePanel = new UpdatePanel();
    > updatePanel.ID = this.ID + "BWPagerUpdatePanel";
    > updatePanel.ChildrenAsTriggers = true;
    > updatePanel.UpdateMode =
    > UpdatePanelUpdateMode.Conditional;
    > div.Controls.Add(updatePanel);
    >
    > linkButton = new LinkButton();
    > linkButton.Text = "<< prev";
    > linkButton.ID = "prevPage";
    > linkButton.Click += new EventHandler(linkButton_Click);
    >
    > updatePanel.ContentTemplateContainer.Controls.Add(linkButton);
    >
    > linkButton = new LinkButton();
    > linkButton.Text = "next >>";
    > linkButton.ID = "nextPage";
    > linkButton.Click += new EventHandler(linkButton_Click);
    >
    > updatePanel.ContentTemplateContainer.Controls.Add(linkButton);
    >
    > label = new Label();
    > label.ID = "SimplePagerTextBox";
    > label.Text = String.Format("&nbsp;&nbsp;Page {0} of {1}",
    > _currentRecord, _totalRecords);
    > updatePanel.ContentTemplateContainer.Controls.Add(label);
    >
    > base.CreateChildControls();
    > }
    >
    > private void linkButton_Click(object sender, EventArgs e)
    > {
    > LinkButton linkButton = sender as LinkButton;
    >
    > if (PageChange != null)
    > {
    > switch (linkButton.ID)
    > {
    > case "prevPage":
    > if (_currentRecord > 1)
    > _currentRecord--;
    > break;
    >
    > case "nextPage":
    > if (_currentRecord < _totalRecords)
    > _currentRecord++;
    > break;
    > }
    >
    > PageChange(this, _currentRecord);
    >
    > RecreateChildControls();
    > }
    > }
    >
    > public int CurrentRecord
    > {
    > get
    > {
    > return _currentRecord;
    > }
    > }
    >
    > public delegate void PageChangeEvent(object sender, int
    > newPage);
    > public event PageChangeEvent PageChange;
    > }
    Phil H, Sep 22, 2007
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?Utf-8?B?cm9kY2hhcg==?=

    Master Pages and Ajax UpdatePanel

    =?Utf-8?B?cm9kY2hhcg==?=, Oct 6, 2006, in forum: ASP .Net
    Replies:
    0
    Views:
    377
    =?Utf-8?B?cm9kY2hhcg==?=
    Oct 6, 2006
  2. =?Utf-8?B?cm9kY2hhcg==?=

    updatepanel and javascript

    =?Utf-8?B?cm9kY2hhcg==?=, Oct 25, 2006, in forum: ASP .Net
    Replies:
    0
    Views:
    359
    =?Utf-8?B?cm9kY2hhcg==?=
    Oct 25, 2006
  3. Replies:
    3
    Views:
    473
    Rob Meade
    Aug 8, 2007
  4. Nathan Sokalski
    Replies:
    1
    Views:
    578
    miher
    Jun 15, 2009
  5. jeljeljel

    CompositeControls and RecreateChildControls()

    jeljeljel, Sep 20, 2007, in forum: ASP .Net Building Controls
    Replies:
    1
    Views:
    970
    Nathan Sokalski
    Sep 28, 2007
Loading...

Share This Page