keyongtech


  keyongtech > dotnet.framework.aspnet.* > dotnet.framework.aspnet.main > 11/2007

 #1  
11-13-07, 12:37 AM
SevDer
Hi,

I have a very simple page where I have a dynamically generated control
(panel) with child controls, but the problem is the dynamically added
control has events and they are not fired which I expect to have a recursive
page generations.

Here is my aspx.
------------------------------------------------------------
<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="Panel1" runat="server" Height="54px" Width="140px">
<asp:Label ID="lTitle" runat="server" Text="My Title"></asp:Label><br />
<asp:Button ID="bPopulate" runat="server" Text="Populate Me"
OnClick="PopulateChildren" CommandArgument="1" /></asp:Panel>
</div>
</form>
</body>

And here is the code behind to generate the dynamic content.
------------------------------------------------------------
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ArrayList dynamicContent;
if (Session["MyItems"] != null)
{
dynamicContent = Session["MyItems"] as ArrayList;
foreach (Panel toAddPanel in dynamicContent)
{
Page.Form.Controls.Add(toAddPanel);
}
}

}

protected void PopulateChildren(object sender, EventArgs e)
{
Button parentButton = (Button)sender;

Panel childPanel = new Panel();
childPanel.EnableViewState = true;

Label childLabel = new Label();
childLabel.Text = "Child of " +
((Label)((Panel)(parentButton).Parent).Controls[1]).Text;
childLabel.EnableViewState = true;

Literal childLiteral = new Literal();
childLiteral.Text = "<br>";
childLiteral.EnableViewState = true;

Button childButton = new Button();
childButton.Text = "Child of " + ((Button)sender).Text;
childButton.Click += new EventHandler(PopulateChildren);
childButton.EnableViewState = true;

childPanel.ID = "p" + (int.Parse(parentButton.CommandArgument) +
1).ToString();
childLabel.ID = "cl" + (int.Parse(parentButton.CommandArgument) +
1).ToString();
childLiteral.ID = "clt" + (int.Parse(parentButton.CommandArgument) +
1).ToString();
childButton.ID = "cb" + (int.Parse(parentButton.CommandArgument) +
1).ToString();

childPanel.Controls.Add(childLabel);
childPanel.Controls.Add(childLiteral);
childPanel.Controls.Add(childButton);

ArrayList dynamicContent;
if (Session["MyItems"] != null)
dynamicContent = Session["MyItems"] as ArrayList;
else
dynamicContent = new ArrayList();
dynamicContent.Add(childPanel);
Session["MyItems"] = dynamicContent;


Page.Form.Controls.Add(childPanel);


}
}

Here I am not insisting on the part that I have in Page_Load but some way I
need to persist the controls in the page and have the events from those
fired.

Can anyone guide me please?

SevDer
http://www.sevder.com
 #2  
11-13-07, 04:07 AM
bruce barker
you can not store the dynamic controls in session. they belong to the
previous page, and becuase they hold a delegat, those pages object are
held, and events if fired, run in the old pages. this also leads to
great memory leaks.

also as every page request is a new class instance, you need to attach
event handlers.

you should store info in session that allows you to recreate the dynamic
content. you shouls also recreate at oninit, not pageload.

-- bruce (sqlwork.com)

SevDer wrote:
[..]
 #3  
11-13-07, 06:33 AM
Walter Wang [MSFT]
Hi SevDer,

In addition to Bruce's reply, you may find following KBs useful:

#HOW TO: Dynamically Create Controls in ASP.NET by Using Visual C# .NET
http://support.microsoft.com/kb/317794

#HOW TO: Dynamically Create Controls in ASP.NET with Visual Basic .NET
http://support.microsoft.com/kb/317515


Regards,
Walter Wang (wawang, remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
Similar Threads
Dynamically Created Controls Not Firing Events

I have been wrestling with this problem for a few days and need some input. I have created a standard webform that contains a TEXTBOX, BUTTON and a USERCONTROL. I want to be...

Dynamically created webcontrol's events not firing

Hi, I'm sure I've done this before, but I can't get it to work today... I'm trying to add a DropDownList into a TableCell and wire up its SelectedIndexChanged event. I'm...

Events not firing from dynamically instantiated classes.

Ok, this is going to be a long post, so I apologize in advance, but if it was an easy question I would have probably found an answer somewhere out here by now... The short...

Adding events to dynamically created controls

I'm adding WebControl objects to a Page dynamically on Page_Load, but I'm having trouble attaching events to these. For example, adding an image button :- ImageButton nb =...

Dynamically firing events using reflection.

Can anyone tell me how to dynamically fire an event? I have an object that reflects on which events it has and based on some logic, elects which one to fire. Or at least...


All times are GMT. The time now is 12:09 AM. | Privacy Policy