2

如何在 asp.net(vb.net) 中动态添加链接按钮到表单?

这是我尝试过的代码:

<form id="form1" runat="server">
    <% For index As Integer = 1 To 10 %>
        <asp:LinkButton ID="#EVAL<%=index%>" runat="server"><%=index%></asp:LinkButton>
    <% Next %>
</form>

我尝试动态使用面板,但这会在使用br标签时产生问题,然后不会换行。

那个代码

Dim lk As LinkButton

For index As Integer = 1 To 10
    lk = New LinkButton
    lk.ID = index
    lk.Text = index
    Panel1.Controls.Add(lk)
Next
4

4 回答 4

2

我建议不要尝试在前端代码中循环它们,而是使用面板并将控件添加到其中。

首先,您将创建您的面板:

<form id="form1" runat="server">
    <ASP:Panel Runat="server" ID="Panel1" />
</form>

然后在后面的代码中,您将动态创建链接并将它们添加到该面板:

    For index As Integer = 1 To 10
        Dim lk As New LinkButton
        lk.ID = index
        lk.Text = index
        Panel1.Controls.Add(lk)
    Next

如果您需要将事件连接到每个链接,您将使用 AddHandler 并附加正确的子:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    For index As Integer = 1 To 10
        Dim lk As New LinkButton
        lk.ID = index
        lk.Text = index
        AddHandler lk.Click, AddressOf DoSomething
        Panel1.Controls.Add(lk)
    Next
End Sub

Sub DoSomething(ByVal sender As Object, ByVal e As EventArgs)
    'Handle click here
End Sub

要解决换行问题,只需创建一个带有 <br> 标记的标签:

    For index As Integer = 1 To 10
        Dim lk As New LinkButton
        lk.ID = index
        lk.Text = index
        AddHandler lk.Click, AddressOf DoSomething
        Panel1.Controls.Add(lk)

        Dim lbl as new label
        lbl.text = "<br>"
        Panel1.Controls.Add(lbl)
    Next
于 2013-09-06T12:23:19.070 回答
0

尝试这个,

<script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            LinkButton lnk1 = new LinkButton();
            lnk1.Text = "testtest";

            LinkButton lnk2 = new LinkButton();
            lnk2.Text = "test";
            pnl1.Controls.Add(lnk1);
            pnl1.Controls.Add(lnk2);
        }
    </script>

<asp:Panel ID="pnl1" runat="server">
    </asp:Panel>
于 2013-09-06T12:24:07.293 回答
0

这是我如何使用先前答案的组合的示例。还从 mysql 数据库中获取数据以使用按钮填充面板。

  • 现在为此客户设置可用的审核
  • 它们将基于 id 和 audits 表
  • 现在从审计表中获取数据

代码

    Dim myStrSql As String = "SELECT audit,user_id,total_questions FROM audits WHERE user_id = " & myGlobalId & ";"
    Dim mySet As New DataSet
    Dim myda As New MySql.Data.MySqlClient.MySqlDataAdapter
    Dim myAudit As String = ""
    Dim myTotalQuestions As Integer = 0

    openMySql()

    myda = New MySql.Data.MySqlClient.MySqlDataAdapter(myStrSql, myConnection)
    myda.Fill(mySet, "SOURCE")

    Dim i As Integer = 0

    If mySet.Tables("SOURCE").Rows.Count > 0 Then
        For i = 0 To mySet.Tables("SOURCE").Rows.Count - 1
            myAudit = IIf(IsDBNull(mySet.Tables("SOURCE").Rows(i).Item("audit").ToString), "", mySet.Tables("SOURCE").Rows(i).Item("audit").ToString)
            myTotalQuestions = IIf(IsDBNull(mySet.Tables("SOURCE").Rows(i).Item("total_questions").ToString), 0, CInt(mySet.Tables("SOURCE").Rows(i).Item("total_questions").ToString))
            'now create a button for each
            Dim btn As New Button()
            btn.ID = "btn_" & Replace(Replace(Replace(Replace(Replace(Replace(myAudit, ",", ""), ".", ""), ":", ""), ";", ""), ":", ""), "?", "")
            btn.Text = myAudit & " : " & myTotalQuestions & " questions."
            AddHandler btn.Click, AddressOf MenuButtonClick
            Panel1.Controls.Add(btn)
            'this puts in a new line in the panel
            Dim lbl As New Label
            lbl.Text = "<br>"
            Panel1.Controls.Add(lbl)
        Next

    End If
End If
于 2014-09-18T07:21:49.497 回答
0

您是在问如何<BR/>动态创建标签吗?

尝试这个:

Dim lk As LinkButton 
Dim br as HtmlGenericControl

 For index As Integer = 1 To 10
     lk = New LinkButton
     lk.ID = index
     lk.Text = index
     Panel1.Controls.Add(lk)

     br = New HtmlGenericControl("br")
     Panel1.Controls.Add(br)
 Next

这一切都来自记忆,但这是一般的想法。

ETA:顺便说一句,我不确定index是否可以用作链接按钮 ID。我认为 ID 需要以字母字符开头。

于 2013-09-06T12:16:29.870 回答