【问题标题】:Passing parameters to crystal reports in C#在 C# 中将参数传递给水晶报表
【发布时间】:2019-05-25 20:32:52
【问题描述】:

我一直试图让它工作一段时间,但我看到的所有示例代码并没有完全按照我正在做的事情。

我有一个程序,它返回我将数据表传递给的报告的 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文件中的任何内容,还是我错过了完全不同的东西?

非常感谢,安迪。

【问题讨论】:

    标签: c# crystal-reports


    【解决方案1】:

    所有参数代码都可以替换为...

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

    我不记得在设置数据源和参数时顺序是否重要。也许先尝试设置数据源。 xsd/datasource 与晶体参数无关。

    更新1

    在数据源分配之后设置参数值 否则您将收到错误“缺少参数值”。

    【讨论】:

    • 是的,就是这样!我想我以前试过这条线,但正如你指出的那样,我将数据源设置在错误的位置。现在可以使用了,谢谢!
    • @Andrew。你能告诉我你是在哪里调用数据源的吗?
    • 将 SetParameterValue 放在数据源分配之后
    【解决方案2】:
    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(); 
    

    【讨论】:

      【解决方案3】:
             //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();
      

      【讨论】:

      • 请解释您已修复或建议的内容。仅仅添加代码并没有多大帮助。
      【解决方案4】:
                      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();
      

      【讨论】:

      • 请解释一下!
      【解决方案5】:

      只要做一件事,你的代码就会自动运行,在添加参数之前先设置数据源...

       crp rpt = new crp();
       rpt.SetDataSource(dt);
       rpt.SetParameterValue("p",p.ToString());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 1970-01-01
        相关资源
        最近更新 更多