|
code
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
UpdatePanel and RecreateChildControlsUpdatePanel 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(" 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; } 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 <livermore.j***@gmail.com> wrote: Show quote > 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(" 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; > } |
|||||||||||||||||||||||