将 DataTable 传递给 ReportViewer

Pass DataTable to ReportViewer

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

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 与 table“Tablefillbycode”

配合使用效果很好

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

  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 并且你想通过DataGridView1 的数据。

别忘了在 Form1

Imports Microsoft.Reporting.WinForms

代码:

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

截图: