Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically generated Linkbutton does not fire Onclick event VB.Net

I have followed some of the instructions to create a new LinkButton at runtime with an event trigger and add an event handler for the LinkButton generated. I have no idea why the new LinkButton does not trigger the event added to it. Anyone please guide/correct me.

This is what I have right now.

ASPX:

<form id="myForm" runat="server">
 <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">

 <ContentTemplate>

 <table class="mel-table" style="text-align: center" runat="server" id="mytab1">

    <tbody>
        <tr>
            <td>Case Number :</td>

            <td>
            <asp:TextBox ID="caseNumber" runat="server"></asp:TextBox>
            </td>

        </tr>

    </tbody>
  </table>

   <asp:Button OnClick="btnOK1_Click" ID="btnOK1" runat="server" Text="Save" />

  </ContentTemplate>

  </asp:UpdatePanel>
 </form>

ASPX.VB:

Protected Overloads Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Session("tablecontent") IsNot Nothing Then
        mytab1 = CType(Session("tablecontent"), HtmlTable)
    End If
End Sub

Public Function checking() As Boolean

        Dim caseNo As Double
            Try
                caseNo = Convert.ToDouble((caseNumber.Text).Trim())
            Catch ex As Exception
            caseNo = 0
            End Try

        Dim r As New HtmlTableRow
        Dim c0 As New HtmlTableCell
        r.Cells.Add(c0)

        Dim but As New LinkButton
        but.ID = caseNo 
        but.Text = caseNo.ToString() 
        AddHandler but.Click, AddressOf LinkButton1_Click
        c0.Controls.Add(but)

        mytab1.Rows.Add(r)
        Session("tablecontent") = mytab1
        Return True
End Function

Protected Sub LinkButton1_Click(sender As Object, e As EventArgs)

    'My Code here

End Sub

Protected Sub btnOK1_Click(sender As Object, e As EventArgs)

    If (checking()) Then

        ScriptManager.RegisterStartupScript(Page, Page.GetType, "Alert", "<script type='text/javascript'>alert('Success');</script>", False)

    End If

End Sub
like image 342
Giri Dharan Avatar asked Apr 30 '15 02:04

Giri Dharan


2 Answers

When you click on the "Save" button, save the data in either local storage or database and try to load the page again to fill the page with the content from the storage. In this case, you can have the content on the page and so, you can utilize the events also.

like image 156
Giri Dharan Avatar answered Nov 16 '22 02:11

Giri Dharan


Whenever you create dynamic control you have to reload it on postback. I am using method call ReloadRows() for reloading added case which i am saving in ViewState:

        <asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional" >
            <ContentTemplate>
                <asp:Table class="mel-table" style="text-align: center" runat="server" id="mytab1">
                    <asp:TableRow>
                        <asp:TableCell>Case Number :</asp:TableCell>
                        <asp:TableCell>
                            <asp:TextBox ID="caseNumber" runat="server"></asp:TextBox>
                        </asp:TableCell>
                    </asp:TableRow>
                </asp:Table>
                <asp:Button OnClick="btnOK1_Click" ID="btnOK1" runat="server" Text="Save" />
            </ContentTemplate>
        </asp:UpdatePanel>

--------------------------------------------------------------------------------------------------------

Public Partial Class _Default
    Inherits System.Web.UI.Page

    Private listCaseNo As List(Of Double) = Nothing

    Protected Sub Page_Init(sender As Object, e As EventArgs)

    End Sub


    Protected Sub Page_Load(sender As Object, e As EventArgs)
        If ViewState("ListCases") IsNot Nothing Then
            listCaseNo = DirectCast(ViewState("ListCases"), List(Of Double))
        Else
            listCaseNo = New List(Of Double)()
        End If

        ReloadRows()
    End Sub

    Public Function checking() As Boolean

        Dim caseNo As Double = 0
        Try
            caseNo = Convert.ToDouble((caseNumber.Text).Trim())
        Catch ex As Exception
            caseNo = 0
        End Try

        Dim r As New TableRow()
        Dim c0 As New TableCell()
        r.Cells.Add(c0)

        Dim but As New LinkButton()
        but.ID = Convert.ToString(caseNo)
        but.Text = caseNo.ToString()
        AddHandler but.Click, AddressOf LinkButton1_Click
        c0.Controls.Add(but)

        mytab1.Rows.Add(r)

        listCaseNo.Add(caseNo)

        ViewState("ListCases") = listCaseNo

        Return True
    End Function


    Private Sub ReloadRows()
        For Each objCase As var In listCaseNo
            Dim r As New TableRow()
            Dim c0 As New TableCell()
            r.Cells.Add(c0)

            Dim but As New LinkButton()
            but.ID = Convert.ToString(objCase)
            but.Text = objCase.ToString()
            AddHandler but.Click, AddressOf LinkButton1_Click
            c0.Controls.Add(but)

            mytab1.Rows.Add(r)
        Next
    End Sub

    Protected Sub LinkButton1_Click(sender As Object, e As EventArgs)
        'My Code here

    End Sub


    Protected Sub btnOK1_Click(sender As Object, e As EventArgs)


        If (checking()) Then
        End If

    End Sub

End Class
like image 1
Sandeep Avatar answered Nov 16 '22 02:11

Sandeep