【问题标题】:Passing Parameters in Crystal report with linked parameters在带有链接参数的 Crystal 报表中传递参数
【发布时间】:2017-05-23 10:10:23
【问题描述】:

我将标题从: 文件临时错误:链接参数上的操作非法

到: 在水晶报表中传递参数

我想我知道如何将参数从主报表传递到子报表,我做了这样的事情:

我现在可以通过水晶报表预览我的报表的外观,一切正常。

但是,当我需要将报表调用到 VB.Net 时,我会使用此代码。

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System.Data.SqlClient
Imports System.Data


Public Class rptXbar

    Private Sub rptXbar_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        LoadXbar(PartNoRep, DimItmRep)

    End Sub

    Sub LoadXbar(ByVal PartNo As String, ByVal DimItem As String)
        Dim sqlcom As New SqlCommand
        Dim dt As New DataTable
        Dim dta As New SqlDataAdapter
        Dim crConnectionInfo As New ConnectionInfo
        Dim crtableLogoninfo As New TableLogOnInfo
        Dim repX As New XbarRchart
        Try
            repX.Load(System.AppDomain.CurrentDomain.BaseDirectory() & "XbarRchart.rpt")
            With sqlcom
                Me.Cursor = Cursors.WaitCursor
                conn.Open()
                .Connection = conn
                .CommandTimeout = 100
                .CommandType = CommandType.StoredProcedure
                .CommandText = "dbo.XBarRChart"
                .Parameters.AddWithValue("@PartNo", PartNo)
                .Parameters.AddWithValue("@DimItem", DimItem)
                .ExecuteNonQuery()
            End With
            dt.Clear()
            dta = New SqlDataAdapter(sqlcom)
            dta.Fill(dt)
            repX.SetDatabaseLogon(userid, password, dtsrc, initcat)
            repX.SetParameterValue("@PartNo", PartNo)
            repX.SetParameterValue("@DimItem", DimItem)

            repX.SetParameterValue("@PartNo", PartNo, "MIPIRHeader.rpt")
            repX.SetParameterValue("@DimItem", DimItem, "MIPIRHeader.rpt")

            repX.SetParameterValue("@PartNo", PartNo, "MIPIRDetails.rpt")
            repX.SetParameterValue("@DimItem", DimItem, "MIPIRDetails.rpt")

            repX.SetDataSource(dt)
            Me.CrystalReportViewer1.ReportSource = repX
            Me.CrystalReportViewer1.Refresh()
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            Me.Cursor = Cursors.Default
        End Try
        conn.Close()
    End Sub
End Class

会弹出一个错误,它会说:

如果我删除链接,参数会要求输入,如果我删除此代码

        repX.SetParameterValue("@PartNo", PartNo, "MIPIRHeader.rpt")
        repX.SetParameterValue("@DimItem", DimItem, "MIPIRHeader.rpt")

        repX.SetParameterValue("@PartNo", PartNo, "MIPIRDetails.rpt")
        repX.SetParameterValue("@DimItem", DimItem, "MIPIRDetails.rpt")

它还会询问参数,有什么建议可以解决这个问题吗?

【问题讨论】:

    标签: vb.net crystal-reports


    【解决方案1】:

    我终于找到了答案!

    Sub LoadXbar(ByVal PartNo As String, ByVal DimItem As String)
            Dim sqlcom As New SqlCommand
            Dim dt As New DataTable
            Dim dta As New SqlDataAdapter
            Dim crConnectionInfo As New ConnectionInfo
            Dim crtableLogoninfo As New TableLogOnInfo
            Dim repX As New XbarRchart
            Try
                repX.Load(System.AppDomain.CurrentDomain.BaseDirectory() & "XbarRchart.rpt")
                With sqlcom
                    Me.Cursor = Cursors.WaitCursor
                    conn.Open()
                    .Connection = conn
                    .CommandTimeout = 100
                    .CommandType = CommandType.StoredProcedure
                    .CommandText = "dbo.XBarRChart"
                    .Parameters.AddWithValue("@PartNo", PartNo)
                    .Parameters.AddWithValue("@DimItem", DimItem)
                    .ExecuteNonQuery()
                End With
                dt.Clear()
                dta = New SqlDataAdapter(sqlcom)
                dta.Fill(dt)
                repX.SetDatabaseLogon(userid, password, dtsrc, initcat)
                repX.SetParameterValue("@PartNo", PartNo)
                repX.SetParameterValue("@DimItem", DimItem)
    
                repX.SetParameterValue("@PartNo", PartNo, "MIPIRHeader.rpt")
                repX.SetParameterValue("@DimItem", DimItem, "MIPIRHeader.rpt")
    
                repX.SetParameterValue("@PartNo", PartNo, "MIPIRDetails.rpt")
                repX.SetParameterValue("@DimItem", DimItem, "MIPIRDetails.rpt")
    
                repX.SetDataSource(dt)
                Me.CrystalReportViewer1.ReportSource = repX
                Me.CrystalReportViewer1.Refresh()
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                Me.Cursor = Cursors.Default
            End Try
            conn.Close()
        End Sub
    

    这是我填充主报表数据和子报表的代码,如果您注意到 repX.SetDataSource(dt) 位于我填充子报表的代码下方,我将代码更改为以下代码:

    Sub LoadXbar(ByVal PartNo As String, ByVal DimItem As String)
            Dim sqlcom As New SqlCommand
            Dim dt As New DataTable
            Dim dta As New SqlDataAdapter
            Dim crConnectionInfo As New ConnectionInfo
            Dim crtableLogoninfo As New TableLogOnInfo
            Dim repX As New XbarRchart
            Try
                repX.Load(System.AppDomain.CurrentDomain.BaseDirectory() & "XbarRchart.rpt")
                With sqlcom
                    Me.Cursor = Cursors.WaitCursor
                    conn.Open()
                    .Connection = conn
                    .CommandTimeout = 100
                    .CommandType = CommandType.StoredProcedure
                    .CommandText = "dbo.XBarRChart"
                    .Parameters.AddWithValue("@PartNo", PartNo)
                    .Parameters.AddWithValue("@DimItem", DimItem)
                    .ExecuteNonQuery()
                End With
                dt.Clear()
                dta = New SqlDataAdapter(sqlcom)
                dta.Fill(dt)
                repX.SetDatabaseLogon(userid, password, dtsrc, initcat)
                'New Location
                repX.SetDataSource(dt)
                repX.SetParameterValue("@PartNo", PartNo)
                repX.SetParameterValue("@DimItem", DimItem)
    
                repX.SetParameterValue("@PartNo", PartNo, "MIPIRHeader.rpt")
                repX.SetParameterValue("@DimItem", DimItem, "MIPIRHeader.rpt")
    
                repX.SetParameterValue("@PartNo", PartNo, "MIPIRDetails.rpt")
                repX.SetParameterValue("@DimItem", DimItem, "MIPIRDetails.rpt")
    
    
                Me.CrystalReportViewer1.ReportSource = repX
                Me.CrystalReportViewer1.Refresh()
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                Me.Cursor = Cursors.Default
            End Try
            conn.Close()
        End Sub
    

    我的代码成功了!所以在 VB.net 中放置命令时也要小心,你可能把它放在了错误的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多