将数据绑定到 ReportViewer 控件的最佳方法是啥? (DataAdapter 与 DataReader)

Posted

技术标签:

【中文标题】将数据绑定到 ReportViewer 控件的最佳方法是啥? (DataAdapter 与 DataReader)【英文标题】:What is the best approach to bind data to ReportViewer control? (DataAdapter vs DataReader)将数据绑定到 ReportViewer 控件的最佳方法是什么? (DataAdapter 与 DataReader) 【发布时间】:2011-04-05 06:09:28 【问题描述】:

我有两种方法可以将数据绑定到 ReportViewer 控件。哪一个更好?你能给我一些建议吗?

方法一:使用SqlDataAdapter

Dim dt As DataTable = New DataTable
Dim conn As SqlConnection = New SqlConnection(connString)
Try
    conn.Open()
    Dim cmd As New SqlCommand(sql, conn)
    Dim adapter As New SqlDataAdapter(cmd)
    adapter.Fill(dt)
Catch ex As Exception
Finally
    conn.Close()
End Try

Dim ds As New ReportDataSource(dataSourceName, dt)
rViewer.LocalReport.DataSources.Clear()
rViewer.LocalReport.DataSources.Add(ds)
rViewer.LocalReport.Refresh()

方法二:使用SqlDataReader

Dim dt As New DataTable()
Dim conn As SqlConnection = New SqlConnection(connString)
Try
    conn.Open()
    Dim cmd As New SqlCommand(sql, conn)
    Dim reader As SqlDataReader = cmd.ExecuteReader()

    dt.Load(reader)
    reader.Close()
Catch ex As Exception
Finally
    conn.Close()
End Try

Dim ds As New ReportDataSource(dataSourceName, dt)
rViewer.LocalReport.DataSources.Clear()
rViewer.LocalReport.DataSources.Add(ds)
rViewer.LocalReport.Refresh()

【问题讨论】:

非常欢迎您评论、接受或询问更多信息。这就是 *** 应该工作的方式。谢谢。 【参考方案1】:

如果我必须在两者之间进行选择,我会选择第一个,因为数据集是使用数据读取器在内部填充的。 您的第二个示例转换数据集中的数据读取器。 第一个选项应该稍微快一些。 另一种选择是使用对象(实体)作为数据源。 您可以找到更多信息here。

【讨论】:

感谢您的回复。我想知道我们是否可以将 DataReader 直接绑定到 ReportViewer。我尝试过使用它,但这里似乎存在一些神秘的错误(由于我的项目的紧迫性,我不得不在不调查发生了什么问题的情况下改变我的方法)。你试过吗? 是的,你不能这样做,因为它的性质。Datareader 不是一个断开连接的数据集,就像数据集一样。 Datareader 保持与数据库的连接,直到您关闭连接。它一次获取一行。 ReportViewer 无法管理它,因为它需要一组断开连接(可枚举)的数据。 @nguyen190887:完全没问题。如果您能接受(使用我的答案旁边的复选按钮)我的答案,我会很高兴。 *** 就是这样工作的:您接受、否决或赞成答案,这样用户(我)就会得到奖励。

以上是关于将数据绑定到 ReportViewer 控件的最佳方法是啥? (DataAdapter 与 DataReader)的主要内容,如果未能解决你的问题,请参考以下文章

2012 中的 ReportViewer 不会绑定到 SQL Server Compact 数据源

c#的reportViewer控件

在运行时将数据源绑定/重新绑定到 reportviewer vb.net

将 DataTable 绑定到 RDLC 和 ReportViewer

使用 RxSwift 将 UITableViewCell 中的控件绑定到 ViewModel 的最佳实践

求教 reportViewer控件的显示数据问题