应用程序传递参数到水晶报表说明

来源:互联网 发布:js鼠标跟随效果的制作 编辑:程序博客网 时间:2024/05/20 11:36

在应用程序窗体中建立一个DateTimePicker控件。实现从DateTimePicker中去时间值传到存储过程里,然后把存储过程的数据集传到data.xsd数据集里。再由水晶报表调用数据。

1.       建立存储过程—CReport1

CREATE PROCEDURE [dbo].[CReport1]

@time datetime

AS

BEGIN

    -- SET NOCOUNT ON added to prevent extra result sets from

    -- interfering with SELECT statements.

    SET NOCOUNT ON;

 

    -- Insert statements for procedure here

    SELECT msbmc,hwm,ssts,time1

--,convert (varchar(20),time1,112) as time1

from dtb join jsb on dtb.jid = jsb.jid

        join hwzl on dtb.hid=hwzl.hid

       join msbzl on dtb.mid=msbzl.mid

where convert(varchar(20),time1,112)=convert (varchar(20),@time,112)

 

2.       打开解决方案右键项目添加新建项数据集。命名为dataset1.xsd

打开dataset1.xsd,右键点击添加—TableAdapter,选择数据库连接,选择“使用现有存储过程”,选择刚才新建的存储过程“CReport1”。点击完成。

这时在dataset1.xsd中出现新的数据集。右键点击“CReport1TableAdapter”下的“FillGetData()”属性,打开Paramters(SQL语句和存储过程的参数)的选项按钮打开  参数集合编辑器,添加存储过程中要输入的time参数。点击添加,在右边的DbType中选择datatime类型,把Size设置为8ParamtersName选项改为@time

完成设置后可以在dataset1.xsd中点击右键预览数据,检查是否能从存储过程中取到数据。

3.       打开解决方案右键项目添加新建项—Crystal报表,建立一个“CrystalReport1.rpt”,

打开CrystalReport1.rpt,在字段资源管理器中,右键数据库字段数据库专家,创建新连接—ADO.NET,弹出连接对话框,在文件路径中选择刚才建立的dataset1.xsd,点击完成。再把dataset1—Creport1加入,点击确定完成。

这时完成在水晶报表中加入数据源。

4.       新建一个form,在form中添加一个CrystalReportViewer控件,一个DateTimePicker控件,一个button控件。打开form代码编辑器。添加以下代码:

Imports System.Data.SqlClient

Imports CrystalDecisions.CrystalReports.Engine

Public Class Form1

    Private strAppTitle As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim customerReport As ReportDocument = New ReportDocument

        Try

 

            Dim strConn As SqlConnection = New SqlConnection("Data Source=localhost;Initial Catalog=cjs;Integrated Security=true")

            Dim ds As DataSet1 = New DataSet1

            Dim adp As SqlDataAdapter = New SqlDataAdapter

            strConn.Open()

            adp.SelectCommand = New SqlCommand

            adp.SelectCommand.Connection = strConn

            adp.SelectCommand.CommandText = "CReport1"

            '执行存储过程

            adp.SelectCommand.CommandType = CommandType.StoredProcedure

            'DateTimePicker的值附给@time

            adp.SelectCommand.Parameters.Add("@time", SqlDbType.DateTime).Value = DateTimePicker1.Value

            adp.SelectCommand.ExecuteNonQuery()

            adp.Fill(ds, "s")

            'Application.StartupPath 表示获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。

            Dim reportPath As String = Application.StartupPath & "/" & "CrystalReport2.rpt"

            customerReport.Load(reportPath)

            customerReport.SetDataSource(ds.Tables("s"))

            CrystalReportViewer1.ReportSource = customerReport

        Catch ExceptionErr As Exception

            MessageBox.Show(ExceptionErr.Message, strAppTitle)

        End Try

    End Sub

End Class