views:

202

answers:

3

Greetings All, I have two ascx's loaded in the page-init event of an aspx page. Control 1 has a radio button list that I want a dropdown list on control 2 to respond to it's selectedIndex change. So far I call RaiseBubbleEvent on the SelectedIndexChange handler and I pass on a control reference and commandArgs. Then in the aspx I override OnBubbleEvent and I am able to receive the control reference and commandArgs. My question is how do I pass this information on to Control 2. The page is not aware of the controls as they are loaded dynamically and added to asp:PlaceHolders in the aspx. I need Control 2 to know which radio button was selected so I can change the datasource for the dropdown on control 2. Does anyone have any examples of something like this? Any pointers or tips would be appreciated.

Thanks, ~ck in San Diego

A: 

I'm not sure this is a very good solution but it should work. Create a handler for the event in control 2 and have some way of accessing a delegate to that handler. Then just hookup the event of control 1 to the handler returned by that accessor. Very crude example:

In control1:

public event SelectedIndexChanged;

public void PageLoad()
{
    radioList.SelectedIndexChanged += new EventHandler(RadSelectedIndexChanged);
}

public void RadSelectedIndexChanged(object sender, EventArgs args)
{
    SelectedIndexChanged(sender, args);
}

In aspx page:

control1.SelectedIndexChanged += control2.GetHandler();

In control2:

public EventHandler GetHandler()
{
    return new EventHandler(HandleEvent);
}

protected void HandleEvent(object sender, EventArgs args)
{

}
Simon Fox
A: 

Well, Control 2 should really just be attaching to the 'SelectedIndexChanged' event of the other control. Is that not possible for some reason?

Noon Silk
A: 

Since you mention that the page is not aware of these controls the best thing is to have the Control1 class to expose an interface with an I-want-to-listen-to-your-event setter method.

Control2 should search its parent (the page) for other sibling control(s) that implement the interface, and then call the setter passing a reference to their handler.

This way the controls can be dropped onto any other page without modification.

Edit:

Added a sample web application for download. The source code is released to the public domain.

devstuff
I like this idea. How do I create an interface with an I-want-to-listen-to-your-event setter method? When u say "setter", do you mean a property {set;} and what type should the method return. I apologize, I am a bit of a newbie when coding events. Thanks.
Hcabnettek
@Kettenbach: Added sample app.
devstuff