Matt
Matt

Reputation: 3970

Passing parameter programmatically and displaying in crystal reports

I have a crystal report in which I set the datasource and parameter programmatically. This works when I just display regular data in the report. However, when I try to show the parameter value in the report header (it's a date), I get prompted to enter the parameter. Any ideas as to what's causing this? I'm new to crystal reports so this might be a very simple problem.

Here's my code:

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();
        }
    }
    }

Upvotes: 3

Views: 20526

Answers (2)

Harsha Herle
Harsha Herle

Reputation: 155

You need to pass the Parameters to CrystalReportViewer control. Use the below code after 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();  

Upvotes: 4

Matt
Matt

Reputation: 3970

The problem was the following line towards the end:

crystalReportViewer1.RefreshReport();    

This caused the report parameters to refresh and not just the report data.

Upvotes: 4

Related Questions