我需要根据填充的DataSet在代码隐藏中添加链接按钮。我怎么做?我是否创建了一个占位符?我可以添加无,一个或许多不同的链接按钮。我还需要让每个链接按钮调用代码隐藏中的方法。当我添加按钮时,如何连接它?
感谢您的帮助。
答案 0 :(得分:3)
这是一种方式:
在前端,您将拥有某种类型的数据转发器控件,例如GridView。
在所述数据绑定控件的ItemTemplate中,您将声明您的链接按钮:
<asp:linkButton CommandName='Foo' CommandArgument='<%# Eval("Bar") %>'>
<%# Eval("Text") %>
</asp:linkButton>
请注意,我正在为其分配一个命令名称,并将值绑定到按钮的CommandArugment中。这很重要。
然后,在服务器端,您将为数据转发器的Click事件连接一个事件。
检查Event Args类的命令名称&amp;根据单击的LinkButton确定您需要访问哪个函数的参数。
答案 1 :(得分:2)
由于您动态创建了链接按钮,因此您应在客户端创建面板或占位符,以便将链接附加到面板,以便了解它们的显示位置:
<asp:PlaceHolder ID="Linkholder" Runat="server"></asp:PlaceHolder>
并在您的代码中
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
For i = 0 To 2 //this is for you iterate how many links you need to add base on your dataset you referred to
Dim ctrl As New LinkButton
//and since it is based on the Database you need to give them unique ids if you want to know which one was clicked based on the data info like so
ctrl.ID = ""+DB.id //id is suppose to be a "column"field from
your database
ctrl.Text = DB.id+"create"
ctrl.CommandArgument = "myargument"
ctrl.CommandName = "mycommandname"
AddHandler ctrl.Click, AddressOf link_button_click
Linkholder.Controls.Add(ctrl)
Next
End Sub
Sub link_button_click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim lb As Linkbutton = CType(sender, LinkButton)
displayObjects(lb.CommandArgument)
End Sub
但如果不是动态的那么你如何在客户端添加链接按钮,但将其设置为false,这样你也可以在控件中点击你希望他们去哪种方法的属性以及基于你的代码。你想要使链接出现在你的回发中会发生什么。当这种情况发生时,将属性设置为true:
<asp:linkbutton id="link1" runat="server" onclick="link1method" visible="false"/>
中的代码
public Page_Load(object sender, EventArgs e)
{
if(//is dataset whatever it is suppose to be for link to show)
{
link1.visible=true;
}
}
public link1method(object sender, EventArgs e)
{
//for link1 method onclick
}
答案 2 :(得分:1)
您需要在RowDataBound事件中为您要绑定的给定GridView编写一些代码。在该方法中,您可以使用一些简单的代码动态添加任意数量的控件。此外,您可以利用CommandName和CommandArgument属性轻松进行单击处理。
您的RowDataBound事件中将包含以下代码。
If e.Row.RowType = DataControlRowType.DataRow Then
Dim SpecialLink As New LinkButton()
SpecialLink.CommandName = "FancyCommand"
SpecialLink.CommandArgument = e.Row.RowIndex.ToString ''//Or your Unique Data Id too.
SpecialLink.Text = "Click me to do custom work."
e.Row.Cells(0).Controls.Add(SpecialLink) ''//Put it in whatever grid cell you'd like
End If
然后,您可以使用RowCommand事件轻松处理命令。
Private Sub ProcessGridCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) _
Handles gvComments.RowCommand
Select Case e.CommandName
Case "FancyCommand"
DoSpecialProcessing(e.CommandArgument)
End Select
End Sub
我喜欢使用Select,因为它可以让以后轻松添加更多自定义命令。如果需要,您可以轻松地为C#重做此代码。
此外,如果您需要添加多个链接按钮,您可以在代码中快速完成,而无需将一堆占位符链接设置为可见或隐藏。
编辑:所以经过快速挖掘,如果你想调用你的JavaScript代码,然后抛弃上面的CommandName / Command Arguments,你可以执行以下操作:
SpecialLink.Attributes("OnClick") = "lnkDocumentOne_Click();"
您可能需要创建一个“catch all”类型的JavaScript方法来处理将调用它的各种链接,或者您也可以使用Page.RegisterClientScript方法注册所有JavaScript方法并动态创建它们。