2011-09-06 176 views
0

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

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

现在,我面临的挑战是,我不知道报表中要打印的列的确切数量,所以恐怕我不得不以编程方式设计报表,所以我的问题是;

  1. 是否有任何方式通过编程来设计报告?例如,我是否可以仅使用代码告诉水晶报表在细节部分放置一个“表格对象”,然后放置一个名为X的列,另一个名为Y?如果可能的话,有人可以给我一些关于如何做这个或类似的示例代码?

  2. 如果在水晶报告中不可能有1,那么有人可以指向我可以达到1的其他报告软件,并且如果可能的话,如何?

  3. 我是否合理地接近问题或者是否有更好更简单的方式来实现客户的期望?

顺便说一句,我已经提供导出表到Excel,从中他们希望客户能够打印出来的可能性,但它会出现,他们更喜欢票友寻求与标识之类的东西作为一个可能的报告在水晶报告中实现。

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

回答

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; 
... 
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” -Edition使用此功能。 我用这个成熟的软件做了一些不错的程序。

0

这是很容易做到的我只是想告诉你新的方法来做到这一点流量此步骤:

  1. 把希望显示到适配器,把适配器的数据集的数据
  2. 在您的计算机驱动程序中生成file.html代码让c
  3. 根据数据集中的单元格和数据集的标题填充数据集中的数据,该数据集是动态列,您想在显示文件后填充文件后显示
  4. 数据打开html文件

浏览器具有的功能,从打印文件的打印预览 页面内容,这是动态的报告只是让你的数据从SQL查询要