Crystal reports 在运行时设计报表

Crystal reports 在运行时设计报表,crystal-reports,reporting,report,Crystal Reports,Reporting,Report,我正在使用vb.net开发一个windows窗体应用程序,它有几个包含DataGridView的窗口。客户机最近提出了能够打印每个表的数据的愿望 几个月前,我成功地使用Crystal reports设计并实现了我的第一份报告,我的第一直觉是使用Crystal reports来完成这项工作。然而,因为我已经确切地知道我想在第一份报告中显示哪些列和数据,所以我可以在设计报告时考虑到这一点,所以这没有问题 现在,我面临的挑战是,我不知道报告中要打印的列的确切数量,所以我担心我必须以编程方式设计报告,所

我正在使用vb.net开发一个windows窗体应用程序,它有几个包含DataGridView的窗口。客户机最近提出了能够打印每个表的数据的愿望

几个月前,我成功地使用Crystal reports设计并实现了我的第一份报告,我的第一直觉是使用Crystal reports来完成这项工作。然而,因为我已经确切地知道我想在第一份报告中显示哪些列和数据,所以我可以在设计报告时考虑到这一点,所以这没有问题

现在,我面临的挑战是,我不知道报告中要打印的列的确切数量,所以我担心我必须以编程方式设计报告,所以我的问题是

  • 是否有任何方法以编程方式设计报表?例如,我是否可以仅使用代码告诉crystal reports在details部分中放置一个“table object”,然后放置一个名为X的列和另一个名为Y的列?如果可能的话,有人能告诉我一些关于如何做这件事或类似事情的示例代码吗

  • 如果1在crystal reports中不可能实现,有人能告诉我其他一些报告软件可以实现1吗?如果可能,如何实现

  • 我是在合理地处理问题,还是有更好、更简单的方法来实现客户的愿望

  • 顺便说一句,我已经提供了将表格导出到excel的可能性,客户可以从中随心所欲地打印表格,但似乎他们更喜欢带有徽标和其他东西的外观更华丽的报表,就像在crystal reports中可以实现的那样


    如果您能帮助我实现此功能,我将不胜感激。

    您有两种方法可以做到这一点,一种很难,另一种很容易。首先,让我们把最难的那一个让开。CR有一个功能齐全的库,可以让您几乎从头开始创建报告。它被称为RAS库。但这是非常复杂的,对于Crystal的新手来说,这并不是最好的事情

    下一个解决方案,也是最简单的,是创建一个包含所有可能需要的字段的报告,然后使用ReportObject模型动态隐藏不需要显示的字段。因此,如果您的报告中有5到10列,请在报告中创建所有10列。然后在你的应用程序中,如果你不需要第10列,就隐藏它。大概是这样的:

    CrystalDecisions.CrystalReports.Engine.ReportDocument myReport;
    myReport.Load("..your file...");
    CrystalDecisions.CrystalReports.Engine.TextObject myField;
    myField =(CrystalDecisions.CrystalReports.Engine.TextObject)HealthRounds.ReportDefinition.ReportObjects["Field10"];
    myField.ObjectFormat.EnableSuppress = true;
    ...
    

    如果你真的需要它的动力,也许更容易,看看。 您需要做的示例看起来有些简单:

    Proj.Open( @“c:\Reports\artikel.lst” ,  LlDomFileMode .Create,
      LlDomAccessMode .ReadWrite, true );
    
    ObjectReportContainer container= new
      ObjectReportContainer (Proj.Objects);
    
    container.Position.Left = “0” ;
    container.Position.Top = “0” ;
    container.Position.Width = “150000” ;
    container.Position.Height = “200000” ;
    
    SubItemTable table = new SubItemTable
      (container.SubItems);
    table.TableID = “Customers” ;
    
    TableLineData dataLineNew = new
      TableLineData (table.Lines.Data);
    dataLineNew.Name = “Created dynamically” ;
    
    TableFieldText textCol = new
      TableFieldText (dataLineNew.Fields);
    textCol.Contents = “Product.No” ;
    
    TableFieldBarcode barcodeCol = new
      TableFieldBarcode (dataLineNew.Fields);
    barcodeCol.Contents = “Barcode(Product.No, ‘PDF417’)” ;
    
    Proj.Save();
    Proj.Close (); 
    

    您至少需要“-Edition”才能使用此功能。
    我已经用这个成熟的软件完成了一些很好的程序。

    这很容易做到,我只想告诉你一些新的方法来完成这些步骤:

  • 将要显示的数据放入适配器,并将适配器数据放入数据集
  • 在计算机驱动程序中生成file.html代码
  • 根据数据集中的单元格和要显示的动态列的数据集标题,将数据集中的数据填充到该文件中
  • 用数据填充文件后,打开html文件
  • 浏览器具有从文件打印预览打印页面内容的功能 这是一个动态报告,可以从SQL查询中获取所需的数据