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

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

  •  2
  • Matt  · 技术社区  · 15 年前

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

    任何帮助都将不胜感激。

    编辑:

    我想做的例子。

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

    报告被放置在一个可由VB.NET应用程序调用的类中。因此,SubUI或更高版本的报告中可能无法创建数据,而SubUI或更高版本的报告中可能无法创建数据。

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

    Dim myRpt As New RunReport.RunReport
    
    myRpt.Load("myReport.rpt")
    
    'Set Labels
     myRpt.SetParameterValue("@FirstName", strFirstName)
    
     CrystalReportViewer1.ReportSource = myRpt
    

    如果需要关联行,也可以使用customerID进行绑定。

    3 回复  |  直到 15 年前
        1
  •  1
  •   bluecoder    15 年前

    您是这样设置主报表的数据源的吗?

    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)



    5) 在“要使用的子报表参数字段”下拉列表中,选择要链接到主报表的子报表参数字段(例如CustID)

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

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

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

        2
  •  1
  •   Dusty    15 年前

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

    资料

    Name           Address        City    State  InvSeq  Item   Amt
    Peter Griffin  36 Spooner St  Quahog  RI     1       Item1  40.00
    Peter Griffin  36 Spooner St  Quahog  RI     2       Item2  30.00
    Peter Griffin  36 Spooner St  Quahog  RI     3       Item3  20.00
    Peter Griffin  36 Spooner St  Quahog  RI     4       Item4  10.00
    

    *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
    

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

        3
  •  0
  •   Bill Martin    15 年前

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

    这是一个很好的网站,如果你还没有看到它,它会让你开始。这对我帮助很大: http://www.emoreau.com/Entries/Articles/2006/09/Feeding-Crystal-Reports-from-your-application.aspx