在运行时设计报告

时间:2011-09-06 12:25:50

标签: crystal-reports reporting report

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

几个月前使用Crystal报告成功设计并实现了我的第一份报告,我的第一直觉是使用水晶报告来做到这一点。但是,因为我已经确切地知道我想在第一份报告中提供哪些列和数据,所以我可以将报告考虑在内,所以这没问题。

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

  1. 有没有办法以编程方式设计报告?例如,我可以使用仅代码告诉水晶报告在详细信息部分中放置“表对象”,然后放置一个名为X的列,另一个名为Y?如果可能的话,有人可以给我一些关于如何做到这一点或类似事情的示例代码吗?

  2. 如果在水晶报告中无法使用1,有人可以指向我可以实现1的其他报告软件,如果可能,如何?

  3. 我是否合理地解决了这个问题,还是有更好更容易实现客户需求的方式?

  4. 顺便说一句,我已经提供了将表格导出到excel的可能性,客户可以根据需要将其打印出来,但看起来他们更喜欢看起来更漂亮的报告,其中包含徽标和内容,这可以通过水晶报告实现

    对于实现此功能的任何帮助,我将非常感激。

3 个答案:

答案 0 :(得分:1)

你有两种方法可以做到这一点,一种很难,另一种很容易。首先让我们把困难的东西拿走。 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;
...

答案 1 :(得分:0)

如果你需要它真的有动力,也许更容易,请看看list & label。 您需要做的样本看起来有点简单:

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 (); 

More Details here...

您至少需要“Professional” - 版才能使用此功能。 我用这个成熟的软件做了一些不错的程序。

答案 2 :(得分:0)

这很容易做到我只是想告诉你这个步骤的新方法:

  1. 将要显示的数据放入适配器并将适配器数据放入数据集
  2. 在您的计算机驱动程序中生成file.html代码,c
  3. 根据数据集中的数据集将数据集中的数据填充到该文件中,数据集中的数据集是要显示的动态列的数据集
  4. 用数据填充文件后打开html文件
  5. 浏览器具有从文件打印预览中打印页面内容的功能 这是动态报告,只需从SQL查询中获取您想要的数据