正如我的项目所在,我尝试手动创建一个Report(Report2.rdlc)并将DataSource中的不同字段拖到报表上,并将该报表用作ReportViewer的数据源.这没用.我需要使用我从SqlDataAdapter创建的DataTable,因为它解密了特定的行.我尝试创建一个DataSet并用DataTable填充它,但是我也无法执行它.
>我不明白:如果我有一个ReportViewer控件
WinForm,我在代码中需要将数据源绑定到它的所有内容.
>代码是否甚至创建报告并使用报告
ReportViewer?
DataTable名称为dt,ReportViewer控件为rv1.
这是我一直在玩的代码,但是我不确定将什么作为报告路径
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 / ReportViewer中使用这些数据.
有人有建议吗?我似乎无法在这个问题上休息一下.
注意:导出到Excel不是一个选项.有加密值需要解密.报告需要打印.
编辑:以下是我填充DataTable的方法:
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)
所以,这里我们有DataTable,其中包含正确的数据.然后我去了项目名称,添加了一个新的报告(Report1.rdlc),从这里我不确定接下来的步骤.如果我动态创建一个DataSet,我应该在这个窗口中看到它吗?
由于这似乎是一个流行的线程,我将解释我是如何能够快速/简单地执行此操作的.
>右键单击您的项目 – >添加新项目 – >选择报告.rdlc
>左上角(数据源) – >新 – >数据集(选择数据库[下一步 – >]数据集[下一步 – >]数据集连接.
>“选择数据库对象”屏幕 – >选择表格
>“选择数据集”屏幕 – >这将在运行时重置.请确保记住此数据集的名称,因为它将在代码中使用.
>将ReportViewer控件(在“报告”下)添加到表单.选择reportviewer控件并转到属性(VS中的右下窗格).选择Local Report的属性并设置ReportEmbeddedResource以指向我们刚刚创建的报告路径. ** ProjectName.ReportName.rdlc **
>按常规执行:
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)
然后,我们在运行时绑定数据源.
DataSet yourDS = FillDS(); ReportDataSource rds = New ReportDataSource("YourDataSetNameFromStep4", yourDS.Tables[0]); yourReportViewerName.localreport.datasources.clear(); yourReportViewerName.localreport.datasources.add(rds); yourReportViewerName.refreshreport();
如果有什么我可以在这里发帖帮助其他人,请告诉我.
有些事要检查:“测试报告”必须是报告设计者使用的名称.这是区分大小写的.
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:在屏幕截图中,下拉数据源并选择所需的数据源.然后它将显示在“报告数据”窗口中,该窗口可能隐藏在“查看”菜单中(只有在您处理报告时才会显示)然后您可以从工具箱中将表添加到报告中,然后拖动“报告数据”窗口中的字段到表格单元格.