这是我的项目结构
Project.Data
Project.Data.Model
- Customer.cs
- Product.cs
- Purchase.cs
- PurchaseDetail.cs
Project.Presentation
- PrintFrm.cs
- TransactionFrm.cs
Project.Presentation.Print
- MyReport.rpt
我想在使用Crystal Report后立即打印用户的购买。
Database Expert的可用数据源中有一个选项,即.Net Objects,但它只显示来自同一项目的类,例如PrintFrm和TransactionFrm。
我需要的是将创建的Purchase对象发送到PrintFrm.cs并根据发送的对象创建MyReport.rpt。
我在PrintFrm.cs中尝试了以下内容:
public object DataSource { get; set; }
public string ReportFilename { get; set; }
private void PrintFrm_Load(object sender, EventArgs e)
{
var reportDir = Application.StartupPath;
if (reportDir.EndsWith("\\bin\\Debug"))
{
reportDir = reportDir.Replace("\\bin\\Debug", "");
}
var reportPath = reportDir + "\\Print\\" + ReportFilename;
if (string.IsNullOrEmpty(ReportFilename)) { throw new NullReferenceException("Report Filename"); }
if (DataSource.Equals(null)) { throw new NullReferenceException("Data Source"); }
_reportDocument.Load(reportPath);
_reportDocument.SetDataSource(DataSource);
crystalReportViewer.ReportSource = _reportDocument;
crystalReportViewer.RefreshReport();
}
以上确实将MyReport.rpt加载到PrintFrm.cs,但我不知道如何根据发送的Purchase对象设计报表,因为设计人员没有选择从另一个项目中选择类(在这种情况下) Project.Data.Model)。
我应该从Purchase对象创建XML并将其发送到MyReport吗?或者有一个明显的解决方案,我只是让新手知道?
非常感谢任何解决方案。
谢谢。