web-dev-qa-db-ja.com

C#でCrystalレポートにパラメーターを渡す

私はこれをしばらくの間機能させようとしてきました、そして私が見たすべてのサンプルコードは私がしていることを完全にやっていない。

データテーブルを渡すレポートのPDFを返すプログラムがあります。これは問題なく機能しますが、他のいくつかのパラメーター(テーブルの日付範囲、統計など)を渡したいので、機能させることができません。私のコードは基本的に次のようになります。

ReportDocument myDataReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
myDataReport.Load(@"C:\Layouts\Report.rpt");
ParameterField myParam = new ParameterField();
ParameterDiscreteValue myDiscreteValue = new ParameterDiscreteValue();
myParam.ParameterFieldName = "MyParameter";
myDiscreteValue.Value = "Hello";
myParam.CurrentValues.Add(myDiscreteValue);
myDataReport.ParameterFields.Add(myParam);
myDataReport.SetDataSource(myDataTable);
Stream returnData = myDataReport.ExportToStream(PortableDocFormat);
myDataReport.Close();
return returnData;

クリスタルのrptドキュメントにパラメータフィールドを追加しましたが、c#のxsdファイルで何かを変更する必要がありますか、それともまったく異なるものがありませんか?

どうもありがとう、アンディ。

8
user158507

そのすべてのパラメータコードは次のように置き換えることができます...

// Set datasource first
myDataReport.SetDataSource(...)
// Assign Paramters after set datasource
myDataReport.SetParameterValue("MyParameter", "Hello");

データソースとパラメータを設定するときに順序が重要かどうかを思い出せません。たぶん、最初にデータソースを設定してみてください。 xsd/datasourceは、結晶パラメータとは関係ありません。

PDATE1

データソースの割り当て後にSetParameterValueを指定しないと、「パラメータ値がありません」というエラーが表示されます。

31
dotjoe
ReportDocument cryRpt = new ReportDocument();

TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
ConnectionInfo crConnectionInfo = new ConnectionInfo();
Tables CrTables;

string path = "C:/reportpath/report.rpt";
cryRpt.Load(path);

cryRpt.SetParameterValue("MyDate2", str2);
cryRpt.SetParameterValue("MyDate", str1);

crConnectionInfo.ServerName = "server";
crConnectionInfo.DatabaseName = "DataBase";
crConnectionInfo.UserID = "user";
crConnectionInfo.Password = "password";

CrTables = cryRpt.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
{
    crtableLogoninfo = CrTable.LogOnInfo;
    crtableLogoninfo.ConnectionInfo = crConnectionInfo;
    CrTable.ApplyLogOnInfo(crtableLogoninfo);
}

crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh(); 
4
mitsu
       //create object of crystal report.
        CrystalReport1 objRpt = new CrystalReport1();
        objRpt.SetDataSource(ds);
        ParameterFields pfield = new ParameterFields();
        ParameterField ptitle = new ParameterField();
        ParameterDiscreteValue pvalue = new ParameterDiscreteValue();
        ptitle.ParameterFieldName = "date";
        pvalue.Value = txtcolor.Text;
        ptitle.CurrentValues.Add(pvalue);
        pfield.Add(ptitle);
        crystalReportViewer1.ParameterFieldInfo = pfield;
        crystalReportViewer1.ReportSource = objRpt;
        crystalReportViewer1.Refresh();
1
P.Nagasiva

1つのことを行うだけで、コードが実行され、パラメータを追加する前に最初にデータソースが自動的に設定されます...

 crp rpt = new crp();
 rpt.SetDataSource(dt);
 rpt.SetParameterValue("p",p.ToString());
0
Tahir Shahzad
                rptTeacherTimeTable ttReport = new rptTeacherTimeTable();
                DataTable dt = new DataTable();
                dt = ObjclsT_TimeTable.GetTimeTableByClass(ClassID);

                objReport = ttReport;
                objReport.SetDataSource(dt);
                objReport.SetParameterValue("RTitle", "Class Time Table");
                objReport.SetParameterValue("STitle", "Teacher Time Table");
                reportViewer.crystalReportViewer1.ReportSource = objReport;
                reportViewer.crystalReportViewer1.Show();
                reportViewer.Show();
0
sanuj dananjaya