VB2005如何设计带动态输出参数字段的水晶报表

来源:互联网 发布:淘宝店铺信用卡支付 编辑:程序博客网 时间:2024/04/29 09:13

http://leek.woku.com/article/4909847.html

 

         水晶报表为我们提供了非常多的报表设计功能,如何来更灵活的设计自已想要的输出文本例如报表的标题。可能由于所属的公司或类型不同,如果不采用参数字段来输入,就需要设计两张报表(*.rpt)文件。或单独保存到数据库内间接调用。利用参数字段从应用程序直接输入到报表增加了灵活性,同时也提高了设计开发的效率。

代码如下:
   

  Public Sub SetCrystalPara(ByVal sPara As String)
        '' ==========================================================
        '     开发人员:段利庆
        '     编写时间:09-08-13
        '     函数名称:FullCrystalRptPara
        '     参数说明:sPara  参数字段值
        '             
        '     功能说明:设置水晶报表的【参数字段值】
        '     其他说明:                  
        '' ==========================================================
        Dim ParamFields As New CrystalDecisions.Shared.ParameterFields
        Dim ParamField As New CrystalDecisions.Shared.ParameterField
        Dim discreteVal As New CrystalDecisions.Shared.ParameterDiscreteValue

        '*设置参数字段的名称,该名称必须与报表中的参数相符
        '*否则不会引起替代的效果
        ParamField.Name = "报表抬头"

        '*设置数值并将它设置给参数字段对象
        discreteVal.Value = sPara
        ParamField.CurrentValues.Add(discreteVal)

        '*加入该参数字段对象至参数字段对象集合
        ParamFields.Add(ParamField)

        '*设置参数字段对象集合至查看器控件
        CrystalReportViewer1.ParameterFieldInfo = ParamFields

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        FullCrystalRptPara(TextBox1.Text)
    End Sub

    Private Sub FullCrystalRptPara(Optional ByVal sPara As String = vbNullString)
        '' ==========================================================
        '     开发人员:段利庆
        '     编写时间:09-08-13
        '     函数名称:FullCrystalRptPara
        '     参数说明:sPara  参数字段值
        '             
        '     功能说明:将数据表显示到【CrystalReportViewer】
        '     其他说明:1.创建报表文件【CstlRptPara.rpt】                     
        '               2.可以采用ADO连接来设计报表的样式,{DataTable}的格式相同就可以

        '' ==========================================================
        '*声明报表文件的对象
        Dim MyCrystalReport1 As New CstlRptPara
        Dim strRptPath As String

        strRptPath = Application.StartupPath + "/CstRpt/CstlRptPara.rpt"


        Try
            '*1:设置报表文件的路径
            MyCrystalReport1.OpenSubreport(strRptPath)
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString)
            GoTo PROC_EXIT
        End Try


        Dim objData As New DBLog
        Dim strSQL As String

        strSQL = "SELECT 编号 as _ ,名称,单价,备注,删除 " & _
                   "FROM 计量仪表_价格 " & _
                  "WHERE 删除 = 0 " & _
               "ORDER BY 编号 "

        '*一个带过滤的测试SQL
        ' strSQL = "SELECT 编号 as _ ,名称,单价,备注,删除 " & _
        '    "FROM 计量仪表_价格 " & _
        '   "WHERE 删除 = 0 " & " AND " & _
        '         "编号 = 3 " & _
        '"ORDER BY 编号 "

        Dim tTable As DataTable = objData.DBOperate(strSQL)

        Try
            '*2:载入数据
            MyCrystalReport1.SetDataSource(tTable)
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString)
            GoTo PROC_EXIT
        End Try
        '*3:提交到控件 显示数据

        '*设置参数字段值
        If Len(sPara) <> 0 Then
            SetCrystalPara(sPara)
        End If


        Me.CrystalReportViewer1.ReportSource = MyCrystalReport1
PROC_EXIT:
        Exit Sub
    End Sub