2015-04-30 11 views
11

Etkinlik tetikleyicisi ile çalışma zamanında yeni bir BağlantıButtonu oluşturma ve oluşturulan LinkButton için bir olay işleyicisi ekleme talimatlarını takip ettim. Yeni LinkButton'un neden eklenmiş olayı tetiklemediğine dair hiçbir fikrim yok. Lütfen beni yönlendirin/düzeltin.Dinamik olarak oluşturulan LinkButton, Onclick olayını tetiklemiyor VB.Net

Şu anda sahip olduğum şey budur.

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:

Eğer geri gönderme onu tekrar yüklemek zorunda dinamik kontrolünü oluşturduğunuzda
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 
+0

Neden "Double" olarak atadığınızda, 'DimNo Long' yazın? Benim tahminim bir 'UpdatePanel' içinde olmakla ilgili. – OneFineDay

+0

CaseNo türünü Double olarak değiştirmeyi denedim ve çalışmadı. –

+0

Bu sorunu çözeceğini söylemedim. Sadece türün neden ayarladığınızdan farklı olduğunu merak ediyor musunuz? Olmanız gereken tür ise, bu bir 'Double' olmalıdır. – OneFineDay

cevap

4

, yerel depolama veya veritabanı ve biriyle verileri kaydetmek: Ben ViewState içinde tasarruf am katma davayı yeniden yönelik yöntem çağrısı ReloadRows() kullanıyorum Sayfayı, içeriği depolama alanından doldurmak için sayfayı tekrar yüklemeyi deneyin. Bu durumda, sayfadaki içeriği alabilir ve böylece etkinlikleri de kullanabilirsiniz.

1

. "Kaydet" düğmesine tıkladığınızda

 <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 
+0

Her bir objCase için var Var ListedenKaliteNo Burada 'var' ile ne demek istiyorsun? ve ayrıca "ReloadRows()" yöntemi, panel her yenilendiğinde tabloya bir satır ekler. Panel diğer öğelerden de olay ile yenilenebilir. –

+0

@GiriDharan var yerine double kullanabilirsiniz. Bu kodu C# olarak yaptım ve daha sonra vb.'ye dönüştürdüm. – Sandeep

+0

Bu çalışmaz. –