S
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>
<aspanel 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" /></aspanel>
</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
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>
<aspanel 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" /></aspanel>
</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