.net 在主报表中插入查询的子报表

.net 在主报表中插入查询的子报表,.net,vb.net,crystal-reports,.net,Vb.net,Crystal Reports,我有一个crystal报告,其中包含一系列参数化字段,这些字段由代码填充并通过CRViewer显示。我需要在这里添加几个部分来执行查询,以返回数据集并在同一个报告中显示。我不确定使用子报表是否是最好的方法。我试图添加一个子报表,然后将该子报表的数据源设置到我的数据集,但无法使其工作 这是正确的方法还是我做错了什么 任何帮助都将不胜感激 编辑: 我想做的例子 假设有一张客户表。我在表单上显示了FirstName LastName作为参数化字段,以及地址和基本客户信息 我想在同一个报告中放置一个子报

我有一个crystal报告,其中包含一系列参数化字段,这些字段由代码填充并通过CRViewer显示。我需要在这里添加几个部分来执行查询,以返回数据集并在同一个报告中显示。我不确定使用子报表是否是最好的方法。我试图添加一个子报表,然后将该子报表的数据源设置到我的数据集,但无法使其工作

这是正确的方法还是我做错了什么

任何帮助都将不胜感激

编辑:

我想做的例子

假设有一张客户表。我在表单上显示了FirstName LastName作为参数化字段,以及地址和基本客户信息

我想在同一个报告中放置一个子报告,显示该客户已完成的所有订单。是一个可能具有多个订单的关联表

报告被放置在一个可由VB.NET应用程序调用的类中。因此,我无法在UI中为子报表创建数据连接(或者我可以稍后创建并传递参数)

我通过执行以下操作成功填充参数化字段:

Dim myRpt As New RunReport.RunReport

myRpt.Load("myReport.rpt")

'Set Labels
 myRpt.SetParameterValue("@FirstName", strFirstName)

 CrystalReportViewer1.ReportSource = myRpt
如果需要关联行,也可以使用customerID进行绑定


这将是一个报告,我只需要显示子报告部分,以处理所有可能的订单。这就是我遇到的问题。

您是否将主报表的数据源设置为这样

Dim ds as new Dataset
sqlAdapter.Fill(ds, "Whatever");
oRpt.SetDataSource (ds)
如果是这样,在子报表上设置它可能如下所示:

Dim oSubReport As ReportDocument
For Each oReportObject As SubreportObject In oRpt.ReportDefinition.ReportObjects  
  If oReportObject.Kind = ReportObjectKind.SubreportObject Then  
    oSubReportObject = CType(oReportObject, SubreportObject)  
    oSubReport = oRpt.OpenSubreport(oSubReportObject.SubreportName)  
    oSubReport.SetDataSource (ds)
  End If  
Next

我已经阅读了你上面的更新,我想我理解你的意图。看看这是否适合您:

1) 创建主报告。Give是您想要的任何选择标准(例如CustName或CustID)
2) 创建子报告。为其提供所需的选择标准(例如CustID)
3) 将子报表插入主报表后,右键单击设计器中的子报表对象/框,然后选择“更改子报表链接”
4) 在“要链接到的字段”框中,从主报表中选择将驱动子报表的值。(客户除外)
5) 在“要使用的子报表参数字段”下拉列表中,选择要链接到主报表的子报表参数字段(例如CustID)

运行报告时,子报告应仅显示主报告中显示的记录的数据

如果这些步骤无法满足您的需求,请描述缺少的功能


注意:如果您试图只提取一次数据(而不是一次用于main,一次用于sub),我的问题是:为什么?

您需要创建两个数据集,并将它们作为参数传递进来。1将包含基本客户信息及其密钥。另一个将包含第一个数据集中具有相应客户密钥的所有客户的订单。然后,您将主报告绑定到第一个数据集。您的子报表将绑定到第二个数据集。然后,您将使用父报表中的客户密钥作为子报表的参数,并按该参数进行筛选。这将子报表限制为仅显示该客户密钥的订单。这一切都可以在报告中使用很少甚至没有代码的情况下完成。所有代码都是在调用报表的.Net对象中完成的


这是一个很好的网站,如果你还没有看到它,它会让你开始。这对我帮助很大:

我希望我能正确理解这一点

基本上,我认为您正在尝试创建一个发票报告,其中标题显示客户信息,详细信息显示发票的详细信息。如果是这种情况,那么我认为最简单的方法就是将customer字段添加到包含发票详细信息的数据集中,如下所示:

资料

然后,只需将客户信息字段添加到报告标题(如果此报告针对多个客户,则添加到客户组标题),以便第一条记录中的数据是客户信息的唯一显示数据。然后将“发票详细信息”字段添加到“详细信息”部分,以便每行重复这些字段,如下所示:

报告布局

*RH*:      Sold To:
           Peter Griffin
           36 Spooner St
           Quahog, RI

*Details*:   InvSeq   Item     Amt.
                1     Item1    $40.00
                2     Item2    $30.00
                3     Item3    $20.00
                4     Item4    $10.00

希望我正确地理解了这个问题,如果是的话,我希望这会有所帮助。

在我的CR报告中,我通常会做几个小节,并在每个小节中放一个子报告。当您需要在同一个报表中显示多个不同的数据集时,这是我知道的最好的方法。你能告诉我们更多的细节吗?出了什么问题?我只是在谷歌上搜索了一些指导或说明,并查看了使用向导创建子报表的示例。我将通过数据集传递数据。因此,我正在寻找我需要做什么来以某种方式将此数据集传递到子报表中。当我尝试设置子报表的datasource属性时,它抛出了一条消息:“报表没有表”。我几乎不知所措,然后一个灯泡在我的脑袋里亮了起来。您是否试图使子报表独立于主报表?尝试以下操作:在主报表的“设计”菜单中,转到“插入->子报表”,选择数据表,并将其中一个或两个字段放置在子报表的可见部分(作为占位符)。不要忘记将必要的参数从主报表传递到子报表。然后转到预览。祝你好运。我正在尝试一些建议的东西。让我看看我是否能更好地描述这一点,我会更新原来的帖子。你能让它工作吗?几个月前我经历过这一切,我明白你在经历什么。事实证明这很直截了当。嘿,你让我找到了正确的答案。我插入了子报表并放置了我创建的数据集中的字段。然后,我将数据集从代码绑定到报告中创建的datatable。它现在正按预期工作。谢谢你的帮助。
*RH*:      Sold To:
           Peter Griffin
           36 Spooner St
           Quahog, RI

*Details*:   InvSeq   Item     Amt.
                1     Item1    $40.00
                2     Item2    $30.00
                3     Item3    $20.00
                4     Item4    $10.00