当前位置 : 主页 > 编程语言 > c语言 >

vb.net – 将DataTable绑定到RDLC和ReportViewer

来源:互联网 收集:自由互联 发布时间:2021-06-24
我已经阅读了关于这一点的每一个SO问题和在线文章,我在几个不同的实例中感到困惑. 正如我的项目所在,我尝试手动创建一个Report(Report2.rdlc)并将DataSource中的不同字段拖到报表上,并将该
我已经阅读了关于这一点的每一个SO问题和在线文章,我在几个不同的实例中感到困惑.

正如我的项目所在,我尝试手动创建一个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:在屏幕截图中,下拉数据源并选择所需的数据源.然后它将显示在“报告数据”窗口中,该窗口可能隐藏在“查看”菜单中(只有在您处理报告时才会显示)然后您可以从工具箱中将表添加到报告中,然后拖动“报告数据”窗口中的字段到表格单元格.

网友评论