制作多页报表:水晶报表查看器只生成第一页(C#)

Posted

技术标签:

【中文标题】制作多页报表:水晶报表查看器只生成第一页(C#)【英文标题】:Make a multiple page report: crystal report viewer only generates first page (C#) 【发布时间】:2017-08-03 03:46:02 【问题描述】:

我正在使用 Windows 窗体和 c# 创建一个应用程序。 我正在尝试使用从 Datagridview 中提取的数字列表在同一个查看器上生成多页报告,但是即使我为水晶报表查看器的存储过程传递了多个参数,水晶报表查看器也只会生成第一页。

我想要的是:对于每个参数,在同一报表查看器中生成与该参数对应的报表,但在每个报表的不同页面中,对所有参数使用相同的存储过程。例如:我传递参数1,报表查看器在页面#1 中显示报表#1,我传递参数2,报表查看器在页面#2 中显示报表#2,依此类推。

我错过了什么?还是我做错了什么?

提前致谢。

这是加载我的报告的代码:

using System;
using System.Configuration;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using mysql.Data.MySqlClient;

namespace Sistema_Facturacion

public partial class frmReporteTodasFacturas : Form

    public int NumeroFactura  get; set; 
    public IList<int> ListaFacturas  get; set; 

    public frmReporteTodasFacturas()
    
        InitializeComponent();
    

    private void crystalReportViewer1_Load(object sender, EventArgs e)
    
        ReportDocument Reporte = new ReportDocument();


        ParameterFields arregloParametros = new ParameterFields();
        ParameterField FacturaNumero = new ParameterField();
        FacturaNumero.Name = "p_idFactura";

        //for each Number in the list generate a different report in a different page

        foreach (int NoFactura in ListaFacturas)
        
            ParameterDiscreteValue valorNumeroFactura = new ParameterDiscreteValue();
            valorNumeroFactura.Value = NoFactura;
            FacturaNumero.CurrentValues.Add(valorNumeroFactura);
            arregloParametros.Add(FacturaNumero);
        

        this.crystalReportViewer1.ParameterFieldInfo = arregloParametros;
        string path =
        Application.StartupPath + System.IO.Path.DirectorySeparatorChar + "Reportes" +
            System.IO.Path.DirectorySeparatorChar + "TodasFacturasSistemaFacturacion.rpt";
        Reporte.Load(path);


        string CadenaConexion = ConfigurationManager.ConnectionStrings["MySQLAutentication"].ToString();

        MySqlConnectionStringBuilder CSB = new MySqlConnectionStringBuilder(CadenaConexion);            

        string BaseDatos= CSB.Database;
        string Usuario = CSB.UserID;
        string Contrasena = CSB.Password;
        string Puerto = CSB.Port.ToString();
        string Servidor = "Driver=MySQL ODBC 5.3 Unicode Driver;Server=" + CSB.Server + ";" +"Port="+ Puerto + ";" +"Option=3;";

        ConnectionInfo ciReportConnection = new ConnectionInfo();

        ciReportConnection.ServerName = Servidor;
        ciReportConnection.DatabaseName = BaseDatos;
        ciReportConnection.UserID = Usuario;
        ciReportConnection.Password = Contrasena;


        foreach (Table table in Reporte.Database.Tables)
        
            table.LogOnInfo.ConnectionInfo = ciReportConnection;
            table.ApplyLogOnInfo(table.LogOnInfo);
        

        foreach (ReportDocument subrep in Reporte.Subreports)
        
            foreach (Table table in subrep.Database.Tables)
            
                table.LogOnInfo.ConnectionInfo = ciReportConnection;
                table.ApplyLogOnInfo(table.LogOnInfo);
            
        


        if (this.crystalReportViewer1.LogOnInfo != null)
        
            TableLogOnInfos tlInfo = this.crystalReportViewer1.LogOnInfo;
            foreach (TableLogOnInfo tbloginfo in tlInfo)
            
                tbloginfo.ConnectionInfo = ciReportConnection;
            
        

        crystalReportViewer1.ReportSource = Reporte;

        crystalReportViewer1.Refresh();
    
  

【问题讨论】:

【参考方案1】:

一位同事告诉我,显然用 Crystal Reports 做这件事是不可能的。所以我决定用iTextSharp来生成一个多页的pdf。

【讨论】:

以上是关于制作多页报表:水晶报表查看器只生成第一页(C#)的主要内容,如果未能解决你的问题,请参考以下文章

水晶报表问题

如何在报表打印时,将多页合为一页

Visual Studio 2010 里面的水晶报表怎么弄?

Winform中怎么使用水晶报表?

vs2008制作水晶报表

VB.net中如何制作水晶报表?