报告仅显示最后一条记录

时间:2014-03-05 12:22:54

标签: vb.net crystal-reports

我必须将数据从VB.NET代码显示到水晶报告......我正在从代码中做所有事情,所以问题是我必须从for-each循环显示多个数据,这就是代码:

Private Sub Print_Row(ByVal pp As Boolean)

        Dim rptDokument As New ReportDocument, brkop As Integer

        Dim rw_mat As DataRow

        Dim cn As OracleClient.OracleConnection = New OracleClient.OracleConnection(Gdb_conn)

        ' Objects used to set the parameters in the report
        Dim pCollection As New CrystalDecisions.Shared.ParameterValues

        Dim pTSJ As New CrystalDecisions.Shared.ParameterDiscreteValue
        Dim pNaziv As New CrystalDecisions.Shared.ParameterDiscreteValue
        Dim pKolicina As New CrystalDecisions.Shared.ParameterDiscreteValue
        Dim pTezina As New CrystalDecisions.Shared.ParameterDiscreteValue

        Try
            rptDokument.Load(Gpath & "PakLista.rpt")

            pTSJ.Value = barcode.Text
            pCollection.Add(pTSJ)
            rptDokument.DataDefinition.ParameterFields("pTSJ").ApplyCurrentValues(pCollection)

            cn.Open()

            Dim myQuery As String = "SELECT S.TSJ,M.NAZ_MAT, S.IBRMAT, S.KOLICINA, S.TEZINA " & _
                                    "FROM TWM_SADRZAJ S, TWM_MATER M, TWM_ATRIBUT A, TWM_PAKIR PAK  " & _
                                    "WHERE(S.VLASNIK_MP = M.VLASNIK_MP) " & _
                                    "AND S.IBRMAT = M.IBRMAT " & _
                                    "AND S.ATR_ID = A.ATR_ID (+) " & _
                                    "AND PAK.VLASNIK_MP (+) = S.VLASNIK_MP  " & _
                                    "AND PAK.IBRMAT (+) = S.IBRMAT " & _
                                    "AND PAK.PAK (+) = S.PAK " & _
                                    "AND (S.TSJ = '" & barcode.Text & "')  " & _
                                    "ORDER BY S.IBRMAT"

            Dim da As OracleClient.OracleDataAdapter = New OracleClient.OracleDataAdapter(myQuery, cn)
            Dim ds As New DataSet

            da.Fill(ds, "TWM_SADRZAJ")

            For Each rw_mat In ds.Tables("TWM_SADRZAJ").Rows

                If (rw_mat.Item("NAZ_MAT") Is DBNull.Value) Then
                    pNaziv.Value = ""
                Else
                    pNaziv.Value = CStr(rw_mat.Item("NAZ_MAT"))
                End If

                If (rw_mat.Item("KOLICINA") Is DBNull.Value) Then
                    pKolicina.Value = ""
                Else
                    pKolicina.Value = CStr(rw_mat.Item("KOLICINA"))
                End If

                If (rw_mat.Item("TEZINA") Is DBNull.Value) Then
                    pTezina.Value = ""
                Else
                    pTezina.Value = CStr(rw_mat.Item("TEZINA"))
                End If

                pCollection.Add(pNaziv)
                rptDokument.DataDefinition.ParameterFields("pNaziv").ApplyCurrentValues(pCollection)

                pCollection.Add(pKolicina)
                rptDokument.DataDefinition.ParameterFields("pKolicina").ApplyCurrentValues(pCollection)

                pCollection.Add(pTezina)
                rptDokument.DataDefinition.ParameterFields("pTezina").ApplyCurrentValues(pCollection)

            Next rw_mat

            If pp Then
                Dim frm As New frmPrint_preview
                frm.crvDocument.ReportSource = rptDokument
                frm.ShowDialog()
            Else
                Dim pd As New PrintDialog
                pd.PrinterSettings = New PrinterSettings
                If pd.ShowDialog(Me) Then
                    For brkop = 1 To pd.PrinterSettings.Copies
                        rptDokument.PrintOptions.PrinterName = pd.PrinterSettings.PrinterName
                        rptDokument.PrintToPrinter(1, False, 1, 99999)
                    Next brkop
                End If
            End If

        Catch Exp As LoadSaveReportException
            MsgBox("Incorrect path for loading report.", MsgBoxStyle.Critical, "Load Report Error")

        Catch Exp As System.Exception
            MsgBox(Exp.Message, MsgBoxStyle.Critical, "General Error")
        End Try
    End Sub

问题出在本节:

pCollection.Add(pNaziv)            rptDokument.DataDefinition.ParameterFields("pNaziv").ApplyCurrentValues(pCollection)

pCollection.Add(pKolicina)                rptDokument.DataDefinition.ParameterFields("pKolicina").ApplyCurrentValues(pCollection)

pCollection.Add(pTezina)               rptDokument.DataDefinition.ParameterFields("pTezina").ApplyCurrentValues(pCollection)

它必须在每个循环的外面收集所有数据,但问题是无论在哪里我把这个代码它只显示数据行的最后一条记录让我们说水晶报告中的5条记录...我知道这是和平的蛋糕,但我被传递到这里,所以我会感激一点帮助。

1 个答案:

答案 0 :(得分:2)

报告仅显示最后一条记录是正常的,因为您尝试将数据作为参数传递。相反,你应该以编程方式设置数据源,你可以在这里看到如何做到^

ReportDocument.SetDataSource Method

在这里,您可以找到有关如何创建要在报告中使用的类型化数据集的完整示例

Create report by vb.net and crystal report