2017-08-03 63 views
0

我已经在本站搜索了我需要的东西,但没有一个答案完全符合我的需求。所以这里的交易:用主控页面写的用户控件引发的事件

我动态,像这样的一些按钮一起加载到用户控件的aspx页面:

Dim uc As UserControl 
Dim btns As New List(Of LinkButton) 
uc = LoadControl("path_to_ascx") 
btns.Add(New LinkButton With {.ID = "btnid", .Text = "Sometext"}) 
uc.GetType().GetProperty("tblButtons").SetValue(uc, btns, Nothing) 
holder2.Controls.Add(uc) 'holder2 is an id of a PlaceHolder 

的这项工作完全正常。按钮按预期显示在页面上。现在,我遇到了麻烦,如何告诉这些按钮提升用户控件加载到的aspx页面中写入的事件。

Public Sub btnClick(sender As Object, e As EventArgs) 
    'do stuff 
End Sub 

为什么我要实现这个目标?因为我有一个非常复杂的UserControl,我希望尽可能重用,但按钮会在每个此UserControl将加载的aspx页面上执行不同的操作。

谢谢

+0

的事情是,你的问题已经在这里https://stackoverflow.com/questions/7713242/asp-net-dynamically-button-with-event-handler回答。你必须做的是谷歌“事件的”asp.net动态按钮“ –

+0

@ T.S。,我不认为提供的链接解决了我的问题。这些按钮在aspx中声明,但它们通过属性发送给usercontrol,并且它们被添加到gridview单元格中。另外,如何根据gridview行值设置一个命令参数。这些按钮必须触发用aspx编写的事件。这甚至有可能吗? – VR46theDoc

回答

0

我已经解决了我的问题。在UserControl中,我在OnRowCreated事件的每一行添加了动态按钮。

我加载用户控件与按钮ASPX像我的问题,我只是增加了一个ID属性为我的用户:

Dim uc As UserControl 
Dim btns As New List(Of LinkButton) 
uc = LoadControl("path_to_ascx") 
btns.Add(New LinkButton With {.ID = "btnid", .Text = "Sometext", .CommandName = "cmdName"}) 
uc.ID = "UserControl1" 'here I added ID property 
uc.GetType().GetProperty("tblButtons").SetValue(uc, btns, Nothing) 
holder2.Controls.Add(uc) 'holder2 is an id of a PlaceHolder 

后,我加一个EventHanlder这样的:

AddHandler TryCast(holder2.FindControl("UserControl1").FindControl("grid"), GridView).RowCommand, AddressOf grid_RowCommand 
'grid is the ID of GrdiView in UserControl 

这里是gridview rowCommand的事件,后面用aspx代码写成:

Protected Sub grid_RowCommand(sender As Object, e As GridViewCommandEventArgs) 
    If e.CommandName = "someCmdName" Then 
     'do stuff 
    Else 
     'do somthing else 
    End If 
End Sub 

也许我的问题还不够好,因为我没有提到,我将在rowCreated事件的gridview行上加载按钮,并将它们连接到RowCommand以供我使用,我很抱歉。

如果有人知道另一种方式来做到这一点,将非常感谢分享。

问候

相关问题