gpt4 book ai didi

vb.net - 将 DataTable 绑定(bind)到 RDLC 和 ReportViewer

转载 作者:行者123 更新时间:2023-12-01 18:18:02 28 4
gpt4 key购买 nike

我已经阅读了与此相关的每个 SO 问题和在线文章,并且在几个不同的情况下我感到困惑。

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

  1. 我不明白:如果我有一个 ReportViewer 控件WinForm,我需要在代码中将数据源绑定(bind)到它。
  2. 代码是否甚至创建了一个报告并利用该报告 ReportViewer

DataTable 名称为 dtReportViewer 控件为 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。有些加密值需要解密。该报告需要可打印。

编辑:这是我填充数据表的方法:

        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)

所以,这里我们有包含正确数据的数据表。然后我转到“项目名称”,添加了一个新报告 (Report1.rdlc),从这里我不确定接下来的步骤。如果我动态创建数据集,我应该在此窗口中看到它吗? enter image description here

<小时/>

由于这似乎是一个流行的话题,我将解释我如何能够通过快速/简单的步骤来做到这一点。

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

    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)

然后,我们在运行时绑定(bind)数据源。

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 的形式,如下所示:使用即席查询和 SqlDataAdapter 填充强类型数据集。调暗 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:在屏幕截图中的位置,下拉数据源并选择您想要的数据源。然后它将出现在“报告数据”窗口中,该窗口可能隐藏在“查看”菜单中(仅当您使用报告时才会出现)然后您可以从工具箱中将表格添加到报告中,然后将从“报告数据”窗口到表格单元格的字段。

关于vb.net - 将 DataTable 绑定(bind)到 RDLC 和 ReportViewer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21680733/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com