3

データソースとパラメーターをプログラムで設定した Crystal レポートがあります。これは、レポートに通常のデータを表示するだけで機能します。ただし、レポート ヘッダーにパラメーター値 (日付) を表示しようとすると、パラメーターを入力するように求められます。これを引き起こしている原因についてのアイデアはありますか? 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();
        }
    }
    }
4

2 に答える 2

4

問題は、最後の次の行でした。

crystalReportViewer1.RefreshReport();    

これにより、レポート データだけでなく、レポート パラメーターが更新されました。

于 2012-09-05T08:29:20.327 に答える
3

パラメータを 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();  
于 2012-09-05T12:02:17.900 に答える