CrBruno
CrBruno

Reputation: 1003

Report only shows the last record

I have to display data from VB.NET code to crystal report...and I'm doing everything from the code, so the problem is that I have to display multiple data from for-each loop, this is the code:

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

The problem is in this section:

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)

It has to be out side for each loop to gather all the data, but the problem is no mater where i put this code it only displays the last record from data row for let's say 5 records in crystal report...I know it's peace of cake but I'm relay stuck here so I would appreciate a little help.

Upvotes: 1

Views: 657

Answers (1)

Raphael
Raphael

Reputation: 1687

It is normal that the report only shows the last record, because you try to pass the data as parameters. Instead you should set the datasource programmatically, you can see how to do it here ^

ReportDocument.SetDataSource Method

and here you can find a complete example of how to create a typed dataset to use on your report

Create report by vb.net and crystal report

Upvotes: 2

Related Questions