WOW!
I'm impressed. I admit I was quite skeptical this morning when I tried out
your solution, but low and behold it worked!
I spent all day yesterday fiddling with this thing!
Thanks a lot. That works quite well.
Mike
On 2/15/07, Efran Cobisi <***@qbgroup.it> wrote:
>
> Mike, I got it.
> This is not an UpdatePanel issue (at least your code is not showing it),
> you can leave it there. Here are the steps you should follow to make
> this page works:
>
> 1) On the markup (.aspx page) set the Repeater rpt1 EnableViewState
> property to true. This one will retain the state between postbacks and
> will let you catch change events correctly.
> 2) Move the initialization code from the Page Load event to the Page
> *Init* event (you can just rename the Page_Load method to Page_Init,
> since you are using the AutoEventWireup feature...). This will let you
> initialize the controls *before* the they have their state loaded, so
> the state would eventually update the original initialization on each
> postback.
> 3) Since you are using an UpdatePanel you should limit the interaction
> with the page to the controls inside the panel itself. So, if you want
> to give a feedback upon checkboxes changes you should place a control,
> say a Label, inside the UpdatePanel. Inside the cb_CheckedChanged method
> just set the Label text to something useful. For example:
>
> void cb_CheckedChanged(object sender, EventArgs e)
> {
> label1.Text += String.Format("{0} state changed.<br />" +
> ((Control)sender).ID);
> }
>
> HTH,
>
> Efran Cobisi
> http://www.cobisi.com
>
> Mike Andrews wrote:
> > We have an UpdatePanel and that contains the Repeater.
> > It's becoming a real problem for this page we need to make.
> >
> >
> > On 2/14/07, Mark Brackett <***@ufl.edu> wrote:
> >>
> >> Perhaps try without the UpdatePanel? I don't see anything that jumps
> out
> >> at me as being a problem with normal ASP.NET...but, I haven't really
> >> worked with Atlas.
> >>
> >> --MB
> >>
> >> -----Original Message-----
> >> From: Discussion of building .NET applications targeted for the Web
> >> [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
> >> Sent: Wednesday, February 14, 2007 1:06 PM
> >> To: DOTNET-***@DISCUSS.DEVELOP.COM
> >> Subject: Re: [DOTNET-WEB] Dynamic WebControl events...
> >>
> >> Hey guys...
> >> Thank you so much for the responses...
> >> However, after some further research into this problem here's what's
> >> going
> >> on. Perhaps one of you know what the issue could be. We are using a
> >> repeater (actually 3 nested repeaters) to dynamically build some forms.
> >> I've been able to deduce these things with dynamic check boxes
> contained
> >> within repeaters:
> >>
> >> 1) When you check a checkbox, all previously checked checkboxes fire
> >> their
> >> CheckedChanged event.
> >> 2) When you uncheck a checkbox, all previously checked checkboxes fire
> >> their CheckedChanged event and the one unchecked does not fire the
> >> CheckedChanged event.
> >>
> >> Any assistance would be most appreciated.
> >>
> >> Thanks,
> >> Mike
> >>
> >> Here's the markup code for the sample page:
> >>
> >> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test2.aspx.cs"
> >> Inherits="Test2" %>
> >> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
> >> http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> >> <html xmlns="http://www.w3.org/1999/xhtml" >
> >> <head runat="server">
> >> <title>Untitled Page</title>
> >> </head>
> >> <body>
> >> <form id="form1" runat="server">
> >> <div>
> >> <asp:ScriptManager ID="scriptManater"
> >> runat="server"></asp:ScriptManager>
> >> <asp:UpdatePanel ID="pnlUpdate" runat="server">
> >> <ContentTemplate>
> >> <asp:Repeater ID="rpt1" runat="server"
> >> EnableViewState="false">
> >> <ItemTemplate>
> >> <asp:PlaceHolder ID="ph1"
> >> runat="server"></asp:PlaceHolder>
> >> </ItemTemplate>
> >> </asp:Repeater>
> >> </ContentTemplate>
> >> </asp:UpdatePanel>
> >> </div>
> >> </form>
> >> </body>
> >> </html>
> >>
> >> Here's the codebehind for the sample page:
> >>
> >> using System;
> >> using System.Data;
> >> using System.Configuration;
> >> using System.Collections;
> >> using System.Web;
> >> using System.Web.Security;
> >> using System.Web.UI;
> >> using System.Web.UI.WebControls;
> >> using System.Web.UI.WebControls.WebParts;
> >> using System.Web.UI.HtmlControls;
> >> using System.Collections.Generic;
> >>
> >> public partial class Test2 : System.Web.UI.Page {
> >> protected void Page_Load(object sender, EventArgs e) {
> >>
> >> List<System.Web.UI.Control> controls = new List<Control>();
> >>
> >> CheckBox cb = null;
> >> cb = new CheckBox();
> >> cb.ID = "test";
> >> cb.Text = "Click Here!";
> >> cb.AutoPostBack = true;
> >> cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> >> controls.Add(cb);
> >>
> >> cb = new CheckBox();
> >> cb.ID = "test2";
> >> cb.Text = "Click Here Again!";
> >> cb.AutoPostBack = true;
> >> cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> >> controls.Add(cb);
> >>
> >> rpt1.ItemCreated += new
> >> RepeaterItemEventHandler(rpt1_ItemCreated);
> >> rpt1.DataSource = controls;
> >> rpt1.DataBind();
> >>
> >> }
> >>
> >> void rpt1_ItemCreated(object sender, RepeaterItemEventArgs e) {
> >> if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
> >> ListItemType.AlternatingItem) {
> >> PlaceHolder ph = (PlaceHolder)e.Item.FindControl("ph1");
> >> CheckBox cb = (CheckBox)e.Item.DataItem;
> >> ph.Controls.Add(cb);
> >> }
> >> }
> >>
> >> void cb_CheckedChanged(object sender, EventArgs e) {
> >>
> >> }
> >> }
> >>
> >>
> >>
> >> On 2/14/07, Mark Brackett <***@ufl.edu> wrote:
> >> >
> >> > I agree with most of this, but not about the Checkbox needing to be
> >> > "created even before the load event".
> >> >
> >> > The Page class (at least in ASP.NET 2.0) actually attempts to load
> >> post
> >> > data TWICE (presumably for issues such as this). The first time is
> >> after
> >> > the InitComplete event, but before PreLoad (trace shows this as
> >> > Begin/End ProcessPostData). The second time is after the Load event,
> >> > which loads any post data that couldn't be loaded on the first pass
> >> > (trace shows this as Begin/End ProcessPostData Second Try"). After
> the
> >> > SECOND run is when the IPostBackDataHandler.RaisePostChangedEventgets
> >> > called (aka CheckedChanged for the Checkbox) (trace show this as
> >> > Begin/End RaiseChangedEvents).
> >> >
> >> > A quick test also proves this, as I get the CheckedChanged event with
> >> a
> >> > Checkbox created in Page_Load.
> >> >
> >> > Of course, the safest and easiest route is to create dynamic controls
> >> in
> >> > PreInit to make sure you catch all aspects of the Page lifecycle.
> >> > Unfortunately, this won't work out for the OP's code because he's
> >> using
> >> > the Page.Form property (not a control reference) which doesn't get
> >> > populated until AFTER PreInit. So, in that case, Init is the earliest
> >> it
> >> > can be added (but it'd probably be easiest to just change it to
> >> > reference the form control, so this.form1.Controls.Add).
> >> >
> >> > --MB
> >> >
> >> > -----Original Message-----
> >> > From: Discussion of building .NET applications targeted for the Web
> >> > [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Ryan Heath
> >> > Sent: Wednesday, February 14, 2007 11:39 AM
> >> > To: DOTNET-***@DISCUSS.DEVELOP.COM
> >> > Subject: Re: [DOTNET-WEB] Dynamic WebControl events...
> >> >
> >> > To backup Paul, if you add a control in the PreRender event, you will
> >> > not receive its events at postback.
> >> >
> >> > Simply because, at postback, the time the control events are raised,
> >> > the methods that will handle the control events are not bounded yet,
> >> > since you would have bound the method at the PreRender event ...
> >> >
> >> > protected void Page_PreRender(object sender, EventArgs e)
> >> > {
> >> > CheckBox cb = new CheckBox();
> >> > cb.ID = "test";
> >> > cb.Text = "Click Here!";
> >> > cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> >> > this.Form.Controls.Add(cb);
> >> > }
> >> >
> >> > void cb_CheckedChanged(object sender, EventArgs e)
> >> > {
> >> > //is never called!
> >> > }
> >> >
> >> > The order of page events are, partially,
> >> > - init
> >> > - load
> >> > - change evts
> >> > - click evts
> >> > - prerender
> >> >
> >> > Normally, creating and binding a control is ok with in the load
> event,
> >> > but the Checkbox, in particular, needs to be created even before the
> >> > load event...
> >> >
> >> > // Ryan
> >> >
> >> > On 2/14/07, Efran Cobisi <***@qbgroup.it> wrote:
> >> > > This is incorrect.
> >> > > Control's life cycle begins after they have been added to their
> >> parent
> >> > > controls; so, even if you add a Control to another Controls
> >> collection
> >> > > in the Page PreRender event, it will still fire its postback
> >> events...
> >> > > As Stacey pointed out, setting the AutoPostback property to true
> >> will
> >> > > solve this problem.
> >> > >
> >> > > HTH,
> >> > >
> >> > > Efran Cobisi
> >> > > http://www.cobisi.com
> >> > >
> >> > > Paul van Brenk wrote:
> >> > > > You should create the checkbox in the Init event... on the
> >> postback
> >> > the
> >> > > > checkbox is created after the events are handled (ie. Too late).
> >> > > >
> >> > > > Paul
> >> > > >
> >> > > > -----Original Message-----
> >> > > > From: Discussion of building .NET applications targeted for the
> >> Web
> >> > > > [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
> >> > > > Sent: Wednesday, February 14, 2007 16:51
> >> > > > To: DOTNET-***@DISCUSS.DEVELOP.COM
> >> > > > Subject: [DOTNET-WEB] Dynamic WebControl events...
> >> > > >
> >> > > > Guys,
> >> > > >
> >> > > > I'm having problems getting an aspx page to process an event for
> a
> >> > > > control,
> >> > > > namely a checkbox, that was dynamically created and added to the
> >> > form.
> >> > > > Any suggestions?
> >> > > >
> >> > > > Thanks,
> >> > > > Mike
> >> > > >
> >> > > > Here's a sample of the code:
> >> > > >
> >> > > > protected void Page_Load(object sender, EventArgs e) {
> >> > > >
> >> > > > CheckBox cb = new CheckBox();
> >> > > > cb.ID = "test";
> >> > > > cb.Text = "Click Here!";
> >> > > > cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> >> > > > this.Form.Controls.Add(cb);
> >> > > >
> >> > > > }
> >> > > >
> >> > > > void cb_CheckedChanged(object sender, EventArgs e) {
> >> > > > //Do something here
> >> > > > }
> >> > > >
> >> > > > ===================================
> >> > > > This list is hosted by DevelopMentor(r) http://www.develop.com
> >> > > >
> >> > > > View archives and manage your subscription(s) at
> >> > > > http://discuss.develop.com
> >> > > >
> >> > > > ===================================
> >> > > > This list is hosted by DevelopMentor(r) http://www.develop.com
> >> > > >
> >> > > > View archives and manage your subscription(s) at
> >> > http://discuss.develop.com
> >> > > >
> >> > >
> >> > > ===================================
> >> > > This list is hosted by DevelopMentor(r) http://www.develop.com
> >> > >
> >> > > View archives and manage your subscription(s) at
> >> > http://discuss.develop.com
> >> > >
> >> >
> >> > ===================================
> >> > This list is hosted by DevelopMentor(r) http://www.develop.com
> >> >
> >> > View archives and manage your subscription(s) at
> >> > http://discuss.develop.com
> >> >
> >> > ===================================
> >> > This list is hosted by DevelopMentor(r) http://www.develop.com
> >> >
> >> > View archives and manage your subscription(s) at
> >> > http://discuss.develop.com
> >> >
> >>
> >> ===================================
> >> This list is hosted by DevelopMentor(r) http://www.develop.com
> >>
> >> View archives and manage your subscription(s) at
> >> http://discuss.develop.com
> >>
> >> ===================================
> >> This list is hosted by DevelopMentor(r) http://www.develop.com
> >>
> >> View archives and manage your subscription(s) at
> >> http://discuss.develop.com
> >>
> >
> > ===================================
> > This list is hosted by DevelopMentor� http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> > http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentor� http://www.develop.com
>
> View archives and manage your subscriptio