Calendar Controls don't fire events

M

Mark Sisson

Good afternoon all.
I am creating a usercontrol (*.ascx) with a Calendar control on it.
In the Calendar's DayRender event I'm dynamically adding ImageButton
controls to cells on the calendar. For each of these image button I'm
hooking up a click event as so:

imgButton.Click += new ImageClickEventHandler(this.ImageButton_Click);

Problem is that when the user clicks on the image button my event
handler never fires. Now I think I know the reason but I don't know
the best solution. Since the controls are added too late in the page
lifecycle they aren't available when the postback happens so they
never get called. So how do I create all these ImageButton's so that
they can receive events on post back?

I've heard about bubbling events but I'm not sure how they work.
Could I a add control to my Calendar in it's DayRender event and tell
the Framework to have it's click-event be sent to the Calendar's click
event???????

tia
 
J

Jos

Mark said:
Good afternoon all.
I am creating a usercontrol (*.ascx) with a Calendar control on it.
In the Calendar's DayRender event I'm dynamically adding ImageButton
controls to cells on the calendar. For each of these image button I'm
hooking up a click event as so:

imgButton.Click += new ImageClickEventHandler(this.ImageButton_Click);

Problem is that when the user clicks on the image button my event
handler never fires. Now I think I know the reason but I don't know
the best solution. Since the controls are added too late in the page
lifecycle they aren't available when the postback happens so they
never get called. So how do I create all these ImageButton's so that
they can receive events on post back?

I've heard about bubbling events but I'm not sure how they work.
Could I a add control to my Calendar in it's DayRender event and tell
the Framework to have it's click-event be sent to the Calendar's click
event???????

tia

I would suggest that on postback, you recreate the calendar in
exactly the same way as before the postback.
Then the events will fire normally.
In the event handler, you can destroy everything again and
build the final page.
 
M

Mark Sisson

Figured it out gang. Basically it comes down to this: GIVE ALL YOUR
CONTROLS IDS!!

Basically I was creating a control dynamically in the PreRender event
and then recreating it during Postback in the Init event like this:

Pseudocode
===================
Page_OnInit
if (Session["ctrlname"] == "") Session["ctrlname"] = "a.ascx";
UserControl uc = LoadControl(Session["ctrlname"];
ud.ID = "MyControl";
Controls.Add(uc)

Page_PreRender
switch case (Session["ctrlname"]) {
case "a.ascx" {
Session["ctrlname"] = "b.ascx";
break;
}
case "b.ascx" {
Session["ctrlname"] = "c.ascx";
break;
}
}
Controls.Clear();
Controls.Add(LoadControl(Session["ctrlname"])



The problem this causes is that when you Clear() the Controls array it
doesn't reset it's control id numbering scheme to start back at zero.
So the first time this page is rendered the controls that goes "out
the door" has an id of ctrl_1 NOT ctrl_0. So during Postback when we
do a great job of recreating the control in the Init routine the
control we create has the id ctrl_0 and doesn't match the control
being posted back which is ctrl_1.

The whole solution is to hardcode an ID for your control. Here's the
new pseudocode that now works:


Pseudocode
===================
Page_OnInit
if (Session["ctrlname"] == "") Session["ctrlname"] = "a.ascx";
Controls.Add(LoadControl(Session["ctrlname"])

Page_PreRender
switch case (Session["ctrlname"]) {
case "a.ascx" {
Session["ctrlname"] = "b.ascx";
break;
}
case "b.ascx" {
Session["ctrlname"] = "c.ascx";
break;
}
}
Controls.Clear();
UserControl uc = LoadControl(Session["ctrlname"];
ud.ID = "MyControl";
Controls.Add(uc)
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,813
Latest member
lawrwtwinkle111

Latest Threads

Top