2011-09-18 123 views
1

我有一个基于我在下面使用SQL创建的数据库的多c#报表。我正在使用以下代码尝试设置数据源,并尝试了许多不同的变体,但无法从我的数据库中获取信息,以便在报告中正确显示。任何帮助是极大的赞赏。数据集正在填充。此外,单表报告正确地填充数据只有多项报表不起作用。Crystal Reports C#

更新:报告现在使用report.Database.Tables["Invoices"].setDataSource(posDataSet.Tables["Invoices"]);显示来自一个表的数据但是,在生成详细信息行的表上使用相同的逻辑不会显示任何数据。

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

namespace SureSalePos 
{ 
    public partial class Reporter : Form 
    { 

     private PosDatabaseDataSet posDataSet; 
     public Reporter(PosDatabaseDataSet dataToReportOn) 
     { 
      InitializeComponent(); 
      posDataSet = dataToReportOn; 
      //InvoiceReport ir = new InvoiceReport(); 
      // this.reportViewer.LocalReport.ReportPath = ir.FileName; 

     } 

     private void Reporter_Load(object sender, EventArgs e) 
     { 
      ConnectionInfo myConnectionInfo = new ConnectionInfo(); 

      myConnectionInfo.ServerName = "";// "PosDatabaseDataSet"; 
      myConnectionInfo.DatabaseName = "";//"PosDatabase.mdf"; 
      myConnectionInfo.UserID = string.Empty; 
      myConnectionInfo.Password = string.Empty; 
      setDBLOGONforREPORT(myConnectionInfo); 
      //this.reportViewer.RefreshReport(); 
     } 

     private void setDBLOGONforREPORT(ConnectionInfo myconnectioninfo) 
     { 
      InvoiceReport report = new InvoiceReport(); 
      report.DataSourceConnections.Clear(); 

      // For each table set the source from your dataset 
      report.Database.Tables["Invoices"].SetDataSource(posDataSet.Tables["Invoices"]); 
      report.Database.Tables["InvoiceItems"].SetDataSource(posDataSet.Tables["InvoiceItems"]); 
      //report.Database.Tables["People"].SetDataSource(posDataSet.Tables["People"]); 
      report.Database.Tables["Preferences"].SetDataSource(posDataSet.Tables["Preferences"]); 
      //report.Database.Tables["Skus"].SetDataSource(posDataSet.Tables["Skus"]); 

      crystalReportViewer1.ReportSource = report; 
      crystalReportViewer1.RefreshReport(); 

     } 

     private void crystalReportViewer1_Load(object sender, EventArgs e) 
     { 
     } 
    } 
} 

编辑:更新上述9月22日

+0

你会得到数据集中的数据还是不是? –

+0

是的数据集不会正确填充数据 – Brandon

+0

有没有人有任何建议呢? – Brandon

回答

0

因为你提供的报告数据,您应该不需要设置登录代码。请尝试以下操作:

report.DataSourceConnections.Clear(); 

// For each table set the source from your dataset 
report.Database.Tables["TableName"].SetDataSource(posDataSet.Tables["TableName"]); 

crystalReportViewer1.ReportSource = report; 
crystalReportViewer1.RefreshReport(); 
+0

这正确显示了来自Invoices表(主表)的报表信息,但没有显示报表中的任何行项目,即InvoiceItems表,当我将它设置为数据源时,表格有10个计数,并且一旦它成为报表的表格,它就继续有10个计数 – Brandon

+0

详细信息中的子报表是否为'InvoiceItems'表?如果是这样,您需要设置子报表的数据源。如果不是,那么表名与报表和自定义数据集是否匹配。用Crystal Reports动态绑定数据并不难。如果一个noobie不是一个大问题,只需要知道如何解释。 – Justin

+0

表名确实匹配,我并不是一般的noob,但对于水晶报告来说并不那么好。发票详细信息部分不在子报表中,只是放置在表单布局的详细信息部分内。如果使用IDE编辑报表,它将显示为正确的链接(即InvoiceItems.Description InvoiceItems.Sku),但报表不显示这些项目,即使将表设置为数据源时已加载行(我已确认使用调试器)。并感谢您的帮助! – Brandon