代码之家  ›  专栏  ›  技术社区  ›  John

如何在没有紧密链接的数据库连接的情况下使用Crystal Reports?

  •  4
  • John  · 技术社区  · 15 年前

    我正在学习使用Crystal Reports(使用VB 2005)。

    到目前为止,我看到的大部分内容都是直接从数据库中提取数据,如果您只想在报告中显示这些数据,那就没问题了。

    我的数据库有很多外键,所以我试图保持在我的应用程序中展示实际信息的理智的方式是向我的对象添加额外的成员,这些成员包含外键所代表的字符串(描述)。像:

    Class AssetIdentifier
    
        Private ID_AssetIdentifier As Integer
        Private AssetID As Integer
        Private IdentifierTypeID As Integer
        Private IdentifierType As String
        Private IdentifierText As String
    
        ...
    

    这里,identifiertypeid是一个外键,我在另一个表中查找该值并将其放在identifiertype中。这样,我就可以在对象中有文本描述,并且可以将其与其他内容一起携带。

    所以,关于我的水晶报告问题。

    Crystal Reports似乎可以很容易地连接到特定表中的记录(尤其是与专家的记录),但这就是您所得到的。

    理想情况下,我想列出我的课程,比如

    Dim assetIdentifiers as New List(Of AssetIdentifier)
    

    把它传递给Crystal Report,而不是与特定的DB进行紧密链接,让我完成大部分工作,但让我围绕它不做的部分工作。到目前为止,我能看到的最接近的数据是ADO.NET数据集,但即便如此,它似乎也远未被删除。我已经很好地处理了查询:我有各种基于查询返回列表的函数。

    有简单的方法吗?

    事先谢谢!

    更新: 好的,我在这里发现了一些东西:

    http://msdn.microsoft.com/en-us/library/ms227595(VS.80).aspx

    但它似乎只为Web项目或Web应用程序提供了这种功能。如果我想集成到一个独立的应用程序中,我会走运吗?

    2 回复  |  直到 8 年前
        1
  •  3
  •   Dusty    15 年前

    按照您发布的链接中的描述继续创建stock对象,并按照指定的方式创建报告(stockobjectsreport)。在这个简化的示例中,我只需将报表查看器(crystalreportviewer1)添加到表单(form1)中,然后在表单加载事件中使用以下代码。

    stock s1 = new stock("AWRK", 1200, 28.47);
    stock s2 = new stock("CTSO", 800, 128.69);
    stock s3 = new stock("LTWR", 1800, 12.95);
    
    ArrayList stockValues = new ArrayList();
    
    stockValues.Add(s1);
    stockValues.Add(s2);
    stockValues.Add(s3);
    
    ReportDocument StockObjectsReport = new StockObjectsReport();
    StockObjectsReport.SetDataSource(stockValues);
    
    crystalReportViewer1.ReportSource = StockObjectsReport;
    

    这应该用Windows窗体中stock对象的3个值填充报表。

    编辑:对不起,我刚意识到你的问题是在VB中,但我的例子是在C。你应该有个大概的想法。:)

        2
  •  0
  •   Richard Dobeson    8 年前

    我正在按文件名加载报告,它工作正常:

    //........
    
    ReportDocument StockObjectsReport;
    
    string reportPath = Server.MapPath("StockObjectsReport.rpt");
    
    StockObjectsReport.Load(reportPath);
    
    StockObjectsReport.SetDataSource(stockValues);
    
    //Export PDF To Disk
    
    string filePath = Server.MapPath("StockObjectsReport.pdf");
    
    StockObjectsReport.ExportToDisk(ExportFormatType.PortableDocFormat, filePath);