【问题标题】:Pass DataTable to ReportViewer将 DataTable 传递给 ReportViewer
【发布时间】:2015-12-29 13:13:20
【问题描述】:

我正在尝试将数据表传递给我通过代码填充的报告查看器,有没有办法做到这一点?我试过了,但什么也没发生:

Dim bs As BindingSource
        bs = New BindingSource()
        bs.DataSource = DataTablefillbycode
        Dim rs As ReportDataSource
        rs = New ReportDataSource()
        rs.Name = "Tabletest"
        rs.Value = bs
        form2.ReportViewer1.RefreshReport()
        form2.ReportViewer1.Reset()
        form2.ReportViewer1.LocalReport.ReportEmbeddedResource = "Test.Report1.rdlc"
        form2.ReportViewer1.LocalReport.DataSources.Clear()
        form2.ReportViewer1.LocalReport.DataSources.Add(rs)

        form2.ReportViewer1.RefreshReport()
      
        form2.ShowDialog()

PS : GridView 与表格 "Tablefillbycode" 配合得很好

【问题讨论】:

  • 我认为 BindingSource 将返回一个 DataView 对象,而不是 Viewer 需要的 DataTable(如果我在这里错了,请纠正我)。尝试“Dim oDt as DataTable = DirectCast(bs.DataSource,DataView).ToTable()”,然后尝试“rs.Value = oDt”,让我知道它是否有效。
  • 你的报告中DataSet的名字是什么?
  • @Aaron 谢谢我现在就试试
  • @RezaAghaei 数据集1
  • @Aaron:无法将“System.Data.DataTable”类型的对象转换为“System.Data.DataView”类型。

标签: vb.net winforms datatable reportviewer


【解决方案1】:

按照以下步骤将数据表传递给您的报告:

  1. 我想您在项目Test 的根目录中创建了一个Report1.rdlc,因此其嵌入资源的名称将是Test.Report1.rdlc。另外我想DataSet 在您的Report1 中的名称是DataSet1

  2. 在您的Form2 上放置一个报表查看器,并将其Dock 属性设置为Fill,并将其Modifier 属性设置为Public

  3. Form1 中,我想您有一个DataGridView1,您想将其填写在Form_Load 中,并且您将使用与创建报告相同的查询。

  4. Form1 我想你有一个Button1,当你点击Button1 时你想显示Form2 并且你想将DataGridView1 的数据传递给它。

别忘了Imports Microsoft.Reporting.WinFormsForm1

代码:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim cn = "data source=(localdb)\v11.0;initial catalog=TestDB;integrated security=True;"
    Dim cmd = "SELECT Id,Name FROM Category"
    Dim adapter = New SqlDataAdapter(cmd, cn)
    Dim table = New DataTable()
    adapter.Fill(table)
    Me.DataGridView1.DataSource = table
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim form2 = New Form2()
    Dim rds= New ReportDataSource("DataSet1", Me.DataGridView1.DataSource)
    form2.ReportViewer1.LocalReport.DataSources.Clear()
    form2.ReportViewer1.LocalReport.DataSources.Add(rds)
    form2.ReportViewer1.LocalReport.ReportEmbeddedResource = "Test.Report1.rdlc"
    form2.ShowDialog()
End Sub

截图:

【讨论】:

  • 可能你在设计器中设置了LocalReportLocalReport 属性中的ReportPath。只需将ReportViewer 放在Form2 上即可使用,无需任何额外设置。
  • 您也可以使用设计器设置报表源,但是将表格传递给报表的方式有所不同。如果您在没有额外设置的情况下使用 1ReportViewer1` 尝试过,或者您是否有任何设置,请告诉我。
  • Test.Report1.rdls 应该是 .rdlc 这是一个愚蠢的错误.. 现在我尝试你告诉我要做的事情 ReportViewer 不像问题中的图片(已禁用).. 但它一个空的 Reportviewer!
  • 只是一个我知道很晚的信息 DataTablefillbycode 是一个数据表,我从我的 sql 管理工作室中的数据库创建它,所以如果你告诉 ReportDataSource 从 DataSet1 获取源代码是没有意义的因为 DataTablefillbycode 是由代码创建的,它没有显示在 DataSet1 Diagrame 中
  • 正如我所说,我认为它是一个表的实例(其中填充了数据)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
相关资源
最近更新 更多