Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > Can Someone Please Explain...

Reply
Thread Tools

Can Someone Please Explain...

 
 
BluDog
Guest
Posts: n/a
 
      10-04-2004
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.
 
Reply With Quote
 
 
 
 
Karl Seguin
Guest
Posts: n/a
 
      10-04-2004
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" <> wrote in message
news:...
> 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.



 
Reply With Quote
 
 
 
 
BluDog
Guest
Posts: n/a
 
      10-04-2004
>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.
 
Reply With Quote
 
Karl Seguin
Guest
Posts: n/a
 
      10-04-2004
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" <> wrote in message
news:...
> >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.



 
Reply With Quote
 
BluDog
Guest
Posts: n/a
 
      10-05-2004
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.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Ajax File Upload. Please, could someone please help me out? Thanks shapper ASP .Net 0 12-18-2007 02:02 AM
Can someone check this NAT/ACL solution please? Rob Dover Cisco 2 12-22-2005 11:10 PM
70-292: can someone please verify / explain the answer to this question Tim Moor MCSE 7 12-18-2005 03:30 AM
Can someone please simple talk RSS for me? ReEfEr MaDnEsS Firefox 2 03-07-2005 05:49 PM
please help... ...me learn C++ please please please :) KK C++ 2 10-14-2003 02:08 PM



Advertisments