我已阅读过有关此问题的每一篇SO问题和在线文章,我在几个不同的实例中感到困惑。
正如我的项目所在,我尝试手动创建报告(Report2.rdlc
)并将DataSources
中的不同字段拖到报告上,并将该报告用作{{1的数据源}}。这没用。我需要使用我从ReportViewer
创建的DataTable
,因为它会解密特定的行。我尝试创建SqlDataAdapter
并使用DataSet
填充它,但我也无法执行此操作。
DataTable
控件
ReportViewer
,我在代码中需要将数据源绑定到它。WinForm
? ReportViewer
名称为DataTable
,dt
控件为ReportViewer
。
这是我一直在玩的代码,但是我不确定要放什么rv1
Report Path
最糟糕的是, Dim RDS1 As ReportDataSource = New ReportDataSource("Test Report", dt)
rv1.LocalReport.DataSources.Clear()
rv1.ProcessingMode = ProcessingMode.Local
rv1.LocalReport.EnableExternalImages = True
rv1.LocalReport.ReportEmbeddedResource = "Your Report Path"
rv1.LocalReport.DataSources.Add(RDS1)`.
只显示空白。什么可能出错,没有错误或任何指标。
ReportViewer
DataTable
中的信息都是正确的(通过在dt
中查看来验证)。我只想在DGV
/ Report
中使用该数据。
任何人都有任何建议吗?我似乎无法在这个问题上休息一下。 注意:导出到Excel不是一个选项。有加密值需要解密。报告需要打印。
修改:以下是我填充DataTable的方法:
ReportViewer
所以,这里我们有DataTable,其中包含正确的数据。然后我去了项目名称,添加了一个新的报告(Report1.rdlc),从这里我不确定接下来的步骤。如果我动态创建一个DataSet,我应该在这个窗口中看到它吗?
按照惯例:
Dim cmd As New SqlCommand
cmd.CommandText = "Select * FROM Participant " & _
"WHERE FIRST_NM_TXT = @searchFirst " & _
"OR LAST_NM_TXT = @searchLast"
cmd.Parameters.AddWithValue("@searchFirst", SearchFirstTxt.Text)
cmd.Parameters.AddWithValue("@searchLast", SearchLastTxt.Text)
Dim adapter As New SqlDataAdapter(cmd)
adapter.Fill(dt)
然后,我们在运行时绑定数据源。
Public DataSet FillDS()
//Try Catch block & other code omitted
Dim cmd As New SqlCommand
cmd.CommandText = "Select * FROM Participant " & _
"WHERE FIRST_NM_TXT = @searchFirst " & _
"OR LAST_NM_TXT = @searchLast"
cmd.Parameters.AddWithValue("@searchFirst", SearchFirstTxt.Text)
cmd.Parameters.AddWithValue("@searchLast", SearchLastTxt.Text)
Dim adapter As New SqlDataAdapter(cmd)
adapter.Fill(dt)
如果有什么我可以在这里发帖帮助其他人,请告诉我。
答案 0 :(得分:3)
要检查的一些事项: “测试报告”必须是报告设计者使用的名称。这是区分大小写的。 dt必须与报表设计器中使用的名称匹配 “您的报告路径”应采用“namespace.reportname.rdlc”形式。这是区分大小写的。
编辑: 我通常使用的方法利用BindingSource形式的额外层,如下所示: 使用ad-hoc查询和SqlDataAdapter填充强类型数据集。 Dim a Bindingsource并将其DataSource设置为数据集,将其DataMember设置为表名。 调暗ReportDataSource并将其名称设置为报表设计器中使用的名称,以及它对BindingSource的值 例如
Using cn As New SqlConnection(gcs)
cn.Open()
Dim sa As New SqlDataAdapter(sql, cn)
sa.SelectCommand.CommandTimeout = cGlobals.ReportTimeout
sa.Fill(ds, "Foos")
End Using
bs.DataSource = ds
bs.DataMember = "Foos"
Dim rds As New ReportDataSource
rds.Name = "dsFooList_Foos"
rds.Value = bs
rv1.LocalReport.DataSources.Add(rds)
Me.Show()
rv1.RefreshReport()
编辑2:在截图中的位置,下拉数据源并选择所需的数据源。然后它将显示在“报告数据”窗口中,该窗口可能隐藏在“查看”菜单中(只有在您处理报告时才会显示)然后您可以从工具箱中将表添加到报告中,然后拖动“报告数据”窗口中的字段到表格单元格。
答案 1 :(得分:0)
我为“报告加载器”做了类似的事情,请查看此链接,它是用C#编写的,但它会让你知道如何操作。
How to bind dynamically datasource to reportviewer on windows forms c#