Crystal Report不使用表单和数据库

时间:2014-09-24 03:13:18

标签: c# vb.net crystal-reports

我有一个VS解决方案,它试图在不使用表单的情况下生成Crystal Report。要使用表单生成报告,请使用以下代码。

private void button1_Click(object sender, EventArgs e)
{
    cryRpt = new ReportDocument();
    cryRpt.Load(PUT CRYSTAL REPORT PATH HERE\\CrystalReport1.rpt");
    crystalReportViewer1.ReportSource = cryRpt;
    crystalReportViewer1.Refresh(); 
}

private void button2_Click(object sender, EventArgs e)
{
    try
    {
        ExportOptions CrExportOptions ;
        DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();
        PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();
        CrDiskFileDestinationOptions.DiskFileName = "c:\\csharp.net-informations.pdf";
        CrExportOptions = cryRpt.ExportOptions;
        {
            CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
            CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
            CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
            CrExportOptions.FormatOptions = CrFormatTypeOptions;
        }
        cryRpt.Export();
    }

我想生成没有表单的PDF。所以我的代码会像那样

_crAdviceRpt.Load("C:\Users\AD_AdviceTemplate.rpt")
Dim ds As ADDataset = New ADDataset
Dim dt As ADDataset.ADDatatableDataTable = New ADDataset.ADDatatableDataTable
Dim dr As DataRow
dr = dt.NewRow
dr("strLinesList") = strLine
dt.Rows.Add(dr)
_crAdviceRpt.SetDataSource(ds.Tables(0))

但是我遇到了问题,因为我不太确定如何替换以下代码

crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh(); 

用于非基于表单的方法。

非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

假设说"我想生成一个没有表格的PDF"您希望使用控制台执行此操作,然后只需在Main中编写代码。

static void Main(string[] args)
{
    ReportDocument cryRpt = new ReportDocument();
    cryRpt.Load(@"D:\daily study\console crystal\ConsoleApplication1\CrystalReport1.rpt");
    ExportOptions CrExportOptions;
    DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();
    PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();
    CrDiskFileDestinationOptions.DiskFileName = "c:\\csharp.net-informations.pdf";
    CrExportOptions = cryRpt.ExportOptions;
    {
        CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
        CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
        CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
        CrExportOptions.FormatOptions = CrFormatTypeOptions;
    }
    cryRpt.Export();
}

代码来自:Link

答案 1 :(得分:0)

错误显示,您的晶体报告内部参数未通过

如果您在报告中使用sp,请阅读以下内容

Crystal report sp和实际sp不相同。  在制作此报告后,您是否更改sp,特别是更改参数数据类型,长度,重命名等。

所以这会影响sp中的定义,你已经在水晶报告中提到过了。执行时总是同步。

当两个部分不相同时会出现此错误。

所以只需转到数据库菜单并首先验证。

转到工具菜单,从WIZARDS子菜单中选择更改数据源/数据库 -------------------------- ** ---------------------- -----------------

现在其他问题可能是你没有传递必须来自c#代码的参数。

 for(int i=0;i<ReportDoc.DataDefinition.FormulaFields.Count; i++)
    if(ReportDoc.DataDefinition.FormulaFields[i].FormulaName==
                    "{" + paramName + "}")
    ReportDoc.DataDefinition.FormulaFields[i].Text = "\"" +paramValue +"\"";

http://www.codeproject.com/Articles/5492/Passing-Parameters-to-Crystal-Reports-at-Runtime

http://www.codeproject.com/Tips/753879/Automatically-Setting-a-Parameter-from-a-Csharp-Va