以编程方式传递参数并在水晶报表中显示

时间:2012-09-04 09:32:35

标签: c# crystal-reports

我有一个水晶报告,我以编程方式设置数据源和参数。当我只在报表中显示常规数据时,这就有效。但是,当我尝试在报告标题中显示参数值(它是一个日期)时,系统会提示我输入参数。 关于是什么导致这个的任何想法?我是水晶报道的新手,所以这可能是一个非常简单的问题。

这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Data.SqlClient;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;

namespace CrystalReportsTestApp
{
    public partial class ReportForm : Form
    {
        ReportDocument report = new ReportDocument();

        public ReportForm()
        {
            InitializeComponent();           
        }

        private void ConfigureCrystalReports()
        {
            string reportPath = "mypath\\CrystalReport1.rpt";
            report.Load(reportPath);
        }

        private void RunReportButton_Click(object sender, EventArgs e)
        {
            DateTime date = dateTimePicker1.Value;

            DataSet reportData = new DataSet();

            SqlConnection conn = null;
            SqlDataAdapter da = null;

            try
            {
                conn = new SqlConnection(connectionString);
                conn.Open();
                da = new SqlDataAdapter();

                SqlCommand cmd = new SqlCommand("cms.GetActiveEntityAccounts", conn);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = date;

                da.SelectCommand = cmd;
                da.Fill(reportData, "DataTable1");

            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
            }

            report.SetDataSource(reportData);
            report.SetParameterValue("@EndDate", date);

            crystalReportViewer1.ReportSource = report;
            crystalReportViewer1.RefreshReport();         
        }

        private void ReportForm_Load(object sender, EventArgs e)
        {
            ConfigureCrystalReports();
        }
    }
    }

2 个答案:

答案 0 :(得分:4)

问题是接下来的行:

crystalReportViewer1.RefreshReport();    

这导致报告参数刷新,而不仅仅是报告数据。

答案 1 :(得分:3)

您需要将Parameters传递给CrystalReportViewer控件。 请在report.SetDataSource(reportData);之后使用以下代码。

CrystalDecisions.Shared.ParameterField parameterField = new CrystalDecisions.Shared.ParameterField();
parameterField.Name = "@EndDate";
//Create a new Discrete Value
CrystalDecisions.Shared.ParameterDiscreteValue parameterDiscreteValue = new CrystalDecisions.Shared.ParameterDiscreteValue();
parameterDiscreteValue.Value = date;

//Add the value
parameterField.CurrentValues.Add( parameterDiscreteValue );

//Add the parameter field
crystalReportViewer1.ParameterFields.Add( parameterField );
crystalReportViewer1.ReportSource = report;
crystalReportViewer1.RefreshReport();