报表查看器 - 具有嵌套列表对象的对象

时间:2010-06-25 14:20:34

标签: vb.net reportviewer

我有一个现有的类结构,并希望/需要使用它作为使用vb和2005的一系列报告的数据源,(尽管我们几乎准备好迁移到2010年,所以如果这样可以解决这个问题今天搬!)

对嵌套对象使用gotreportviewer sample我已经添加了一个reportmanager类,它暴露了一个getdata方法,它已经填充了我的所有数据并返回了一个列表(对象)。数据存在并且在数据绑定时是正确的,我可以添加和引用顶级属性,但无论我尝试什么语法,我都无法引用嵌套类/列表中的字段。我收到各种消息,从ouput字段中的“#Error”到无,无法编译。

我的班级结构大致是简短形式:

Assembly0  
   Class ReportManager  
   TheData as List(Of Object)   
   New() 'that populates TheData from the class structure below
   GetData() as List(of Object)    

   Assembly1  
   Class Test  
     aProperty1 as String  
     aProperty2 as Int  
     aProperty3 as String  
     aProperty4 as String  
     aProperty4 as List(of aType1)  

   Assembly2   
   Class AaType1  
     aProperty1 as String  
     aProperty2 as Int  
     aProperty3 as String  
     aProperty4 as String
     aProperty4 as List(of aType2)   
     aProperty4 as List(of aType3) 
     aProperty4 as String  

   Assembly3  
   Class aType2  
     aProperty1 as Boolean  
     aProperty1 as String  
     you get the idea  

   and so on.....  

在我的主应用程序中

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  
' Create an instance of our ReportManager Class  
Try  
   ' trust assemblies used in get data  
    ReportViewer1.LocalReport.ExecuteReportInCurrentAppDomain(Assembly.GetExecutingAssembly().Evidence)
    ReportViewer1.LocalReport.AddTrustedCodeModuleInCurrentAppDomain("assy1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1234")
    ReportViewer1.LocalReport.AddTrustedCodeModuleInCurrentAppDomain("assy2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1234")
    ' etc through ALL dependant assemblies

    ' create datamanager, that will populate its TheData property
    Dim reportMan As Data.Reporting.Manager = New Data.Reporting.Manager(18) ' test id sent  

    ' this is the method from the gotreportviewer sample, which only allows you to reference top level properties, regardless of syntax used. i.e. =Fields!Prop.Value.SubProp 
    ' doesnt work  
    'ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DummyDataSource", reportMan.GetData))  
    'Me.ReportingDataBindingSource.DataSource = reportMan.GetData  


    ' this is the only method I have found that allows me to reference an objects nested property and its fields.....?  
    Data = reportMan.GetData()  
    Me.ReportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local  
    Me.ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("Data_Reporting_ReportingData", Data))  

    ' fortnatley there is only ever one test in the list, HOWEVER there will be 4 specimens and n stages below that and so on.. 
    Dim SpecimenData As SpecimenList = Data(0).Specimens
    Me.ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("Tests_Specimen", SpecimenData))

    ' so this method is no good either. currently only a test its just returning the first specimen.
    'Dim StageData As Tests.Stages = Data(0).Specimens(0).Stages
    'Me.ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("Tests_Specimen", SpecimenData))

    ' render report
    Me.ReportViewer1.RefreshReport()
Catch ex As Exception
    MessageBox.Show(ex.Message)
End Try

End Sub

我在网上找到了修复/谷歌搜索:

  • 您必须添加“ExecuteReportInCurrentAppDomain”, 完成没有区别。

  • 您必须添加 汇编:AllowPartiallyTrustedCallers()到AssemblyInfo.vb,没有区别。

  • 你必须强烈地命名你的依赖程序集,完成它并且它确实摆脱了 有关在报告的“代码”属性中进行调用的错误 (用于本地化)。

  • 尝试了= Fields!Property.Value.SubProperty语法,但它不起作用!无论我尝试什么变化。

    rdlc中的

    ' - 此语法适用于顶级属性
    = Sum(Fields!TestVersion.Value,“Data_Reporting_ReportingData”)

    '使用上面代码中的备用方法列表 = First(Fields!Index.Value,“Tests_Specimen”)

    '但这些不是因为它的子项属性 = First(Fields!Specimens.Value.Index,“Data_Reporting_ReportingData”)
    =领域!Specimens.Value.Index
    = Fields!Specimens.Value.Index.Value

    这是否意味着我别无选择,只能制作类似的东西 Dim SpecimenData As Tests.SpecimenList = Data(0)。每个嵌套对象的样本?同样由于显而易见的原因,我宁愿不必将整个数据结构扁平化,因为它很庞大。

我已经尝试了我能找到的所有内容,并没有太多内容,所有内容都指向同样的三篇文章/博客帖子,这些文章对我来说不起作用,他们的样本未经修改的工作,但没有一个工作时应用于嵌套列表或继承列表类型的嵌套对象。

有没有人有任何使用嵌套列表实际有效的对象的示例代码?因为除了最简单的场景之外,我在网上找不到任何东西。即一个程序集,或一个代码文件,或者没有嵌套列表或简单/本机类型。

我一直在这周是A WEEK的最佳部分!我现在很秃头,强调请帮忙。

如果没有人能够建议一个支持这种事情的第三方供应商? 水晶?卵石?

对文字墙道歉...... MATMA

1 个答案:

答案 0 :(得分:2)

我正在寻找几乎一样的,除了我有对象作为属性的其他对象,没有对象列表,无论如何,你问Crystal Reports是否做了这种事情,是的它做了,这样做有点困难,但确实如此。

我不知道为什么现在很难与这种想法一起工作。因为我们不再使用持久性框架,如实体框架等,所以,你做了一个持久的工作,当你去报告时,如果你想轻松工作,你需要回到你的数据库模型! 浪费时间!

我刚刚发现,它可以在报表查看器中执行,但它在Visual Studio 2010中出现问题,在SP1中已修复,但您需要设置所有用作的类嵌套对象为Serializable

请阅读:http://wraithnath.blogspot.com.br/2011/04/reportviewer-object-datasource-nested.html