asp.net
  • .net
  • vb.net
  • 2012-01-16 159 views 0 likes 
    0

    這是我的數據列表:獲得價值

    <asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1" 
           RepeatLayout="Flow"> 
          <ItemTemplate> 
    
           <asp:Label ID="IdLabel" runat="server" Text='<%# Eval("ID") %>' Visible="False" /> 
           Titre: 
           <asp:Label ID="TitreLabel" runat="server" Text='<%# Eval("Titre") %>' /> 
           <br /> 
           Description: 
           <asp:Label ID="DescriptionLabel" runat="server" 
            Text='<%# Eval("Description") %>' /> 
           <br /> 
    
           <asp:Image ID="Image1" runat="server" 
           ImageUrl='<%# Eval("ID", "Handler.ashx?ID={0}") %>' Width="200" Height="200"/> 
    
           <br /> 
           comments: 
           <asp:Label ID="commentsLabel" runat="server" Text='<%# Eval("comments") %>' /> 
           <br /> 
    
           Ajouter commentaire 
           <asp:button ID="btnAjouter" runat="server" OnCommand="Button_Command" 
           CommandName="add" Text="Ajouter" /> 
           <asp:TextBox ID="TextBoxComments" runat="server"></asp:TextBox> 
           <br/> 
           <br/> 
          </ItemTemplate> 
         </asp:DataList> 
    

    這是我aspx.vb按鈕事件:

    Sub Button_Command(ByVal sender As Object, ByVal e As CommandEventArgs) 
        Dim connectionString As String = WebConfigurationManager.ConnectionStrings("BecsEtMuseauxSQL").ConnectionString 
        Dim con As SqlConnection = New SqlConnection(connectionString) 
    
        con.Open() 
    
        Dim cmd As New SqlCommand("updateComments", con) 
        cmd.CommandType = CommandType.StoredProcedure 
        //I try this .... 
        cmd.Parameters.Add("@id", SqlDbType.Int).Value = DataList1.FindControl("IdLabel").ToString() 
        cmd.Parameters.Add("@Comments", SqlDbType.NVarChar).Value = DataList1.FindControl("TextBoxComments").ToString() 
    
        cmd.ExecuteNonQuery() 
    End Sub 
    

    我得到這樣一個錯誤:「對象引用不definied對象實例」

    我怎樣才能趕上從標籤IdLabel和TextBoxComments在這種情況下的價值?

    +0

    哪條線是給你的錯誤? – JaredPar 2012-01-16 19:50:42

    +0

    cmd.Parameters.Add(「@ id」,SqlDbType.Int).Value = DataList1.FindControl(「IdLabel」)。ToString() cmd.Parameters.Add(「@ Comments」,SqlDbType.NVarChar).Value = DataList1.FindControl( 「TextBoxComments」)。的ToString() – FrankSharp 2012-01-16 19:51:58

    +0

    IM回在15分鐘內 – FrankSharp 2012-01-16 19:54:04

    回答

    1

    您應該處理DataList's ItemCommand,而不是按鈕的命令。

    然後你就可以用e.Item.FindControl找到您的控件:

    Private Sub DataList1_ItemCommand(source As Object, e As System.Web.UI.WebControls.DataListCommandEventArgs) _ 
        Handles DataList1.ItemCommand 
        If e.CommandName = "add" Then 
         Dim IdLabel = DirectCast(e.Item.FindControl("IdLabel"), Label) 
         Dim TextBoxComments = DirectCast(e.Item.FindControl("TextBoxComments"), TextBox) 
         ' ... ' 
        End If 
    End Sub 
    

    上ASPX,免除您的冗餘Command -handler:如果你想使用按鈕的點擊事件,而不是

    <asp:button ID="btnAjouter" CommandName="add" Text="Ajouter" runat="server" /> 
    

    ,這是也可能。

    Protected Sub btnAjouter_Click(sender As Object, e As EventArgs) 
        Dim container = DirectCast(DirectCast(sender, Control).NamingContainer, DataListItem) 
        Dim IdLabel = DirectCast(container.FindControl("IdLabel"), Label) 
        Dim TextBoxComments = DirectCast(container.FindControl("TextBoxComments"), TextBox) 
        ' ... ' 
    End Sub 
    

    上ASPX,點擊事件處理程序添加到按鈕:

    <asp:button ID="btnAjouter" OnClick="btnAjouter_Click" Text="Ajouter" runat="server" /> 
    
    +0

    我不得不remplace小組按鈕命令(BYVAL發件人爲對象,BYVALË作爲CommandEventArgs)??? – FrankSharp 2012-01-16 19:56:25

    +0

    在你前面的問題中顯示的方式是處理DataList的ItemCommand事件,而不是按鈕的命令事件。我在這裏向你展示了兩種方法。 1.處理DataList的ItemCommand(優選的)2.處理按鈕的點擊事件。我假設你混合了兩者。 – 2012-01-16 20:05:39

    相關問題