65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在运行时将参数传递给 Crystal Reports

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.36/5 (8投票s)

2007年12月15日

CPOL

2分钟阅读

viewsIcon

102398

一篇关于如何在运行时将参数从 Windows 窗体传递给 Crystal 报表的文章。

引言

在本文中,我将向您展示如何在运行时从 Windows 窗体向 Crystal Reports 传递参数。我从我参与的一个项目中展示了一个示例。您可以查看下图。这是一个车辆维护工单窗体。在这种情况下,如果您想打印工单窗体,您必须将此工单号(071208-0104-AVA230/2)传递给 Crystal Report,以便报告仅显示所请求的工单。

首先,使用向导创建一个 Crystal Report。现在,我假设您知道如何在 VS 2005 中通过向导创建 Crystal Report。假设我们已经创建了与数据库中的 WorkOrders 表关联的报告。

现在,从 字段资源管理器 中,将 无绑定字符串字段 拖放到 Crystal Report 中。然后,从 字段资源管理器 中,浏览 公式字段,右键单击该无绑定字符串字段,并将其重命名为 UBWONo。然后,右键单击 Crystal Report 中的该字段并格式化对象。然后将其字体颜色设置为白色,以便在运行时不显示。因此,您现在在报告中有一个字段,它将在运行时获取参数。但是,您必须将此参数字段值传递给实际的数据库 WorkOrderNo 字段,以便我们可以从数据库中获取该工单编号的记录。



现在,右键单击数据库字段 WorkOrders.BOWONo 并单击 选择专家…

在选择专家对话框中,提供以下参数

现在您的 Crystal Report 已经准备好接收参数了。在您调用报告的 Windows 窗体后面,在本例中,您将看到如上图所示的第一张图片。

Imports System.Data.SqlClient
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Public Class FrmWOVehicleMaint
Public logOnInfo As New CrystalDecisions.Shared.TableLogOnInfo()
Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles btnPrint.Click
    Me.Cursor = Cursors.WaitCursor
    If SqlConn.State = 1 Then SqlConn.Close()
    Dim frmRept As New FrmReportsDisplay
    Dim oCR As New rptBOWorkOrder
    oCR.DataDefinition.FormulaFields.Item("UBWONo").Text = "'" & Me.lblWONo.Text & "'"

strSQL = "SELECT VehiclesWorkOrders.BOWONo, VehiclesWorkOrders.DateGiven,  _
        VehiclesWorkOrders.TimeGiven, VehiclesWorkOrders.VehicleNo, _
        VehiclesWorkOrders.Mileage,VehiclesWorkOrders.DateComplete, _
        VehiclesWorkOrders.TimeComplete, VehiclesWorkOrders.TotalDownTime, _
        Employees.FirstName, Employees.MiddleName, Employees.LastName, _
        employees_1.FirstName AS Expr1, employees_1.MiddleName AS Expr2, _
        employees_1.LastName AS Expr3,VehicleCard.VehicleType, _
        VehicleCard.Manufacturer, VehicleCard.VinNo, _
        VehiclesWorkOrders.Problem, VehiclesWorkOrders.Diagnose, _
        VehiclesWorkOrders.PartsUsed, VehiclesWorkOrders.Remarks  _
        FROM VehiclesWorkOrders  LEFT OUTER JOIN Employees _
        AS Employees ON VehiclesWorkOrders.IssuedBy = _
        Employees.EmployeeID LEFT OUTER JOIN Employees AS employees_1 _
        ON VehiclesWorkOrders.HandoverTo = _
        employees_1.EmployeeID LEFT OUTER JOIN VehicleCard _
        AS VehicleCard ON VehiclesWorkOrders.VehicleNo = _
        VehicleCard.VehicleNo  WHERE VehiclesWorkOrders.BOWONo =_
        " & oCR.DataDefinition.FormulaFields.Item("UBWONo").Text
        Dim cmd As New SqlCommand(strSQL, SqlConn)
        Dim DA As New SqlDataAdapter(cmd)
        Dim DS As New DataSet
        DA.Fill(DS, "VehiclesWorkOrders,Employees,Employees_1,VehicleCard")
        DT = DS.Tables(0)
        SqlConn.Open()
        oCR.SetDataSource(DS)
        frmRept.CRViewer.ReportSource = (oCR)
        logOnInfo = oCR.Database.Tables(0).LogOnInfo
        logOnInfo.ConnectionInfo.ServerName = mServerName
        logOnInfo.ConnectionInfo.DatabaseName = mInitialCatalog
        logOnInfo.ConnectionInfo.UserID = mUser
        logOnInfo.ConnectionInfo.Password = mPassword
        oCR.Database.Tables(0).ApplyLogOnInfo(logOnInfo)
        frmRept.Show()
        SqlConn.Close()
        Me.Cursor = Cursors.Default
    End Sub
如何在运行时向 Crystal Reports 传递参数 - CodeProject - 代码之家
© . All rights reserved.