2011-06-08 123 views
2

大家好我只是開始在asp.net編程我努力添加事件處理程序動態。下面是這種情況時,ASPX頁面加載鏈接按鈕是一個事件處理程序asp.net事件處理程序,當點擊鏈接按鈕動態

頁面加載添加鏈接按鈕和事件處理程序鏈接按鈕


昏暗的產品作爲新的LinkBut​​ton

添加products.Text = 「產品」

testPanel.Controls.Add(產品)

的AddHandler products.Click,AddressOf的getProducts


在數據庫中的getProducts功能將循環得到的所有產品

Dim testDb As New Product 
    Dim arr As ArrayList = testDb.DbLoop() 
    Dim ObjList As ProductBo 
    Dim ID As Integer 
    Dim link As LinkButton 



    For Each ObjtList In arr 

     ID= ObjtList.C_Id 
     link = New LinkButton 
     testPanel.Controls.Add(New LiteralControl("<br />")) 
     link.ID = ID 
     link.Text = ObjList.Name 
     link.CommandArgument = CustInt 
     Me.testPanel.Controls.Add(link) 
     AddHandler link.Click, AddressOf getProductsDetails 
    Next ObjList 

這裏是循環就會顯示數據庫中的產品列表,我想做添加什麼之後,我的問題每個產品名稱的鏈接,當我點擊一個產品時,它應該調用另一個事件處理程序,我試試這個,但它不工作。

的AddHandler link.Click,AddressOf getProductsDetails

謝謝

回答

1

立交下面一行:

Me.testPanel.Controls.Add(link) 
AddHandler link.Click, AddressOf getProductsDetails 

他們應該是:

AddHandler link.Click, AddressOf getProductsDetails 
Me.testPanel.Controls.Add(link) 
2

它不工作的原因你是否正在通過回傳。每次回發都必須重新添加處理程序。我會在頁面_Init事件中執行此操作。

+0

+1 @Robert Beaubien。我只是忽略了這一點。 – 2011-06-08 15:19:49

3

不要忘記你必須re-create all dynamic controls on postback

Page就是一個類記得,它是每個請求實例化一次,如果不重新創建這些控件以及上回發請求相關的處理程序,那麼你不會得到任何事情發生..

你需要這些控件重現之前Page_Load,您可以在Page_Init做到這一點或重寫CreateChildControls方法。

+0

也爲你+1。 – 2011-06-08 15:20:17

0

試試這個:

Protected Sub page_init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 'addhadler must in here! 
    somecode... 
End Sub 
0
Protected Sub page_init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 
    addButton()'必須加在此處,否則動態註冊的事件無法初始化 
End Sub 

Public sub addButton(ByVal nvrid As Integer) As Object 
'..... 
     AddHandler btn.Command, AddressOf testCmd 
End sub 
    Private Sub testCmd(source As Object, e As CommandEventArgs) 
     Debug.Print(e.ToString) 

End Sub