1

問題を説明する前に、英語が下手ですみません。クエリを含む関数があり、それを返したいという基本的なことしか知りません。これを行っていました。

Public Function obtenerDataAjuste(ByVal id As Integer)
     Dim ajuste As New Ajuste
     Dim cmd as New SqlCommand("usp_obtenerDataAjuste",cn.getCN")
     cmd.CommandType = CommandType.StoredProcedure
     cn.getCN().Open()
     Dim dr as SqlDataReader
     dr = cmd.ExecuteReader
     Dim ajustelist As New List(Of Ajuste)
     While dr.Read
         ajuste.pesomix = dr("PesoMix")
         ajuste.pesoprod = dr("PesoProd")
         ajuste.unidad = dr("UNIDAD_EMPAQUE")
     End While
     cn.getCN().Close()
     Return ajustelist.ToArray
End Function

しかし、私はこの関数を私のコードビハインドに呼び出していたので、間違っていると思います:

Dim opd As New OPDAO
    For Each objAjuste In opd.obtenerDataAjuste(CInt(Session("idop")))
        Dim pesomix As Decimal = objAjuste.pesomix
        Dim pesoprod As Decimal = objAjuste.pesoprod
        Dim empaque As Integer = objAjuste.unidad

        'Reajuste unidad ajustado
        Dim unidadajustado As Double = pesomix / pesoprod
        Session("undajustado") = Convert.ToInt32(unidadajustado)

        'Reajuste paquete ajustado
        Dim paqueteajustado As Double = Session("undajustado") / empaque
        Session("pqtajustado") = paqueteajustado

    Next

それは私にとってはうまくいきません。最後のレコードを返します。誰でも私を助けてくれますか?ありがとう!

4

2 に答える 2

2

リストに何も追加していません。また、ループAjusteで新しいオブジェクトを初期化する必要があります。While dr.Read

これが、whileループの外側Ajusteで初期化したオブジェクトを常に上書きするため、現在最後の値しか表示されない理由です。

  Dim ajustelist As New List(Of Ajuste)
         While dr.Read
             Dim ajuste As New Ajuste       // <-- add this
             ajuste.pesomix = dr("PesoMix")
             ajuste.pesoprod = dr("PesoProd")
             ajuste.unidad = dr("UNIDAD_EMPAQUE")
             ajustelist.Add(ajuste)         // <-- and this
         End While
于 2012-09-26T17:27:09.207 に答える
1

For Eachループを実行するたびに、以前にSession( "undajustado")に入れたものを上書きします。これは、完了するとループの最後の項目になります。

私はあなたがあなたを助けることができる前にあなたが何を達成しようとしているのかを知る必要があります。

于 2012-09-26T17:26:45.120 に答える