I am trying to pass a datatable to a reportviewer which I fill by code, is there a way to do that? I tried this but nothing happened:
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 : The GridView works fine with the table "Tablefillbycode"
Follow these steps to be able to pass data table to your report:
I suppose you created a Report1.rdlc
in root of your project Test
, so the name of its embedded resource would be Test.Report1.rdlc
. Also I suppose the name of DataSet
in your Report1
is DataSet1
.
Put a report viewer on your Form2
and set its Dock
property to Fill
and set its Modifier
property to Public
.
In Form1
I suppose you have a DataGridView1
that you want to fill it in the Form_Load
and you will use the same query that you used for creating report.
In Form1
I suppose you have a Button1
that you want to show Form2
when you click on Button1
and you want pass the data of DataGridView1
to it.
Don't forget to Imports Microsoft.Reporting.WinForms
in Form1
Code:
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
Screenshot:
Any idea for creating RDLC report at run-time from a DataGridView?
You might be interested to the following post which explains how you can dynamically convert any DataGridView to an RDLC report at run-time for printing purpose, etc. The post comes withe the full code in a GitHub repo and a download link: