By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,620 Members | 1,303 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,620 IT Pros & Developers. It's quick & easy.

Can Someone Please Explain...

P: n/a
Hi

I am trying to test dynamically created controls, to do this i have
added a placeholder to a WbForm and added the following code behind:

Private Property Count() As Integer
Get
If ViewState("Count") Is Nothing Then ViewState("Count") = 1
Return CType(ViewState("Count"), Integer)
End Get
Set(ByVal Value As Integer)
ViewState("Count") = Value
End Set
End Property

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then AddButton()
End Sub

Private Sub button_Click(ByVal sender As Object, ByVal e As EventArgs)
AddButton()
End Sub

Private Sub AddButton()

Dim button As New Button
button.Text = "Button" & Count.ToString
button.ID = "Button" & Count.ToString
AddHandler button.Click, AddressOf button_Click
PlaceHolder1.Controls.Add(button)
Count += 1

End Sub

What i would expect is a button to be added to the placeholder during
the first load of the page, then each time the button is cllicked
another button to be added to the form.

However the original button is added in the load event, but the click
event is never handled on the dynamically created buttons, so on
postbacks no buttons are shown.

Can anyone explain how to acheive what i am afer here?

Thanks

Blu.
Nov 18 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
When you click the button and postback, the button isn't re-created, thus
the event is never fired. People make this mistake often. You don't have
to set the eventhandler when originally creating the item, you need to set
it on postback.

If you simply remove the not ispostback check and always call AddButton in
page_load it'll work.

To reinforce my original point though, you could actually do:

Dim button As New Button
button.Text = "Button" & Count.ToString
button.ID = "Button" & Count.ToString
if page.ispostback then
AddHandler button.Click, AddressOf button_Click
end if
PlaceHolder1.Controls.Add(button)
Count += 1

notice how the handler is only hooked up on postback - I don't recommend it,
since it'll only avoid a little overhead but will make it look more
confusing. I just wanted to point it out to illustrate that events need to
be hooked on postback, not on non-postback.

Karl

--
MY ASP.Net tutorials
http://www.openmymind.net/
"BluDog" <ne**@nospam.bludog.net> wrote in message
news:uh********************************@4ax.com...
Hi

I am trying to test dynamically created controls, to do this i have
added a placeholder to a WbForm and added the following code behind:

Private Property Count() As Integer
Get
If ViewState("Count") Is Nothing Then ViewState("Count") = 1
Return CType(ViewState("Count"), Integer)
End Get
Set(ByVal Value As Integer)
ViewState("Count") = Value
End Set
End Property

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then AddButton()
End Sub

Private Sub button_Click(ByVal sender As Object, ByVal e As EventArgs)
AddButton()
End Sub

Private Sub AddButton()

Dim button As New Button
button.Text = "Button" & Count.ToString
button.ID = "Button" & Count.ToString
AddHandler button.Click, AddressOf button_Click
PlaceHolder1.Controls.Add(button)
Count += 1

End Sub

What i would expect is a button to be added to the placeholder during
the first load of the page, then each time the button is cllicked
another button to be added to the form.

However the original button is added in the load event, but the click
event is never handled on the dynamically created buttons, so on
postbacks no buttons are shown.

Can anyone explain how to acheive what i am afer here?

Thanks

Blu.

Nov 18 '05 #2

P: n/a
>If you simply remove the not ispostback check and always call AddButton in
page_load it'll work.


Karl,

Thanks for your comments, however this only sorts out the event
handler for the original button (button1) added in the page load. Any
buttons added in the click event of the button are not added.

This is only a test page that i knocked up to try and understand
ViewState and PostBack on dynamically created controls. As it stands i
can't see events on dynamically created controls evern being handled
properly as more and more postbacks take place.

Cheeers

Blu.
Nov 18 '05 #3

P: n/a
Blu,
I understand where you are coming from. However the same holds true with
the buttons added in the click...they also need to be readded.

Denis Bauer has a placeholder control that helps you do this..though I've
never used it:
http://www.denisbauer.com/ASPNETCont...aceholder.aspx
Karl

--
MY ASP.Net tutorials
http://www.openmymind.net/
"BluDog" <ne**@nospam.bludog.net> wrote in message
news:88********************************@4ax.com...
If you simply remove the not ispostback check and always call AddButton inpage_load it'll work.


Karl,

Thanks for your comments, however this only sorts out the event
handler for the original button (button1) added in the page load. Any
buttons added in the click event of the button are not added.

This is only a test page that i knocked up to try and understand
ViewState and PostBack on dynamically created controls. As it stands i
can't see events on dynamically created controls evern being handled
properly as more and more postbacks take place.

Cheeers

Blu.

Nov 18 '05 #4

P: n/a
On Mon, 4 Oct 2004 14:17:11 -0400, "Karl Seguin" <karl REMOVE @ REMOVE
openmymind REMOVEMETOO . ANDME net> wrote:
Blu,
I understand where you are coming from. However the same holds true with
the buttons added in the click...they also need to be readded.

Denis Bauer has a placeholder control that helps you do this..though I've
never used it:
http://www.denisbauer.com/ASPNETCont...aceholder.aspx
Karl


Thanks Karl, you have pretty much confirmed my conclusions on this -
every postback needs to be aware of previous postbacks to ensure
anything done dynamically previously can be repeated. Thus making an
application in a webpage a little difficult.

Interesting control though, gunna have a good play today.
Nov 18 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.