将DataTable绑定到RDLC和ReportViewer

时间:2014-02-10 15:09:24

标签: vb.net datatable datasource reportviewer

我已阅读过有关此问题的每一篇SO问题和在线文章,我在几个不同的实例中感到困惑。

正如我的项目所在,我尝试手动创建报告(Report2.rdlc)并将DataSources中的不同字段拖到报告上,并将该报告用作{{1的数据源}}。这没用。我需要使用我从ReportViewer创建的DataTable,因为它会解密特定的行。我尝试创建SqlDataAdapter并使用DataSet填充它,但我也无法执行此操作。

  1. 我不明白:如果我有一个DataTable控件 ReportViewer,我在代码中需要将数据源绑定到它。
  2. 代码甚至是否正在创建报告并使用该报告     WinForm
  3. ReportViewer名称为DataTabledt控件为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,我应该在这个窗口中看到它吗? enter image description here


    由于这似乎是一个受欢迎的主题,我将解释如何以快速/简单的步骤完成此任务。

    1. 右键点击你的项目 - >添加新项目 - >选择报告.rdlc
    2. 左上角(数据源) - >新 - >数据集(选择数据库[下一步 - >]数据集[下一步 - >]数据集连接。
    3. “选择数据库对象”屏幕 - >选择表
    4. “选择数据集”屏幕 - >这将在运行时重置。 请确保记住此数据集的名称,因为它将在代码中使用。
    5. 将ReportViewer控件(在“报告”下)添加到表单中。选择reportviewer控件并转到属性(VS中的右下窗格)。选择Local Report的属性并设置ReportEmbeddedResource以指向我们刚刚创建的报告路径。 ** ProjectName.ReportName.rdlc **
    6. 按照惯例:

              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)
      
    7. 然后,我们在运行时绑定数据源。

      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)
      

      如果有什么我可以在这里发帖帮助其他人,请告诉我。

2 个答案:

答案 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#