将数据网格视图转换为报表查看器
本文关键字:报表 转换 数据 数据网 网格 视图 | 更新日期: 2023-09-27 18:26:08
绅士,
在构建这个问题之前,我阅读了30多个搜索条目(并尝试了所有条目),其中大多数都没有回复。虽然这是我第一次在这里问问题,但10多年来,这里一直是我最喜欢得到答案的地方。就这样。。。我创建了以下代码来接受来自另一个页面上的数据集的数据,并在报表查看器中传播它。
//Creates the Grid View
dataGridViewReport.DataSource = null;
dataGridViewReport.DataSource = ds.Tables[0].DefaultView;
//Creates the Report
reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.ReportPath = Application.StartupPath + @" 'Report1.rdlc";// @"C:'Users'Pat'Documents'Visual Studio 2010'Projects'TTW 151200'TTW'Report1.rdlc";
DataTable dt = ds.Tables[0];
dt.TableName = "DataSet1";
ReportDataSource rds = new ReportDataSource("DataSet1", dataGridViewReport.DataSource);
reportViewer1.LocalReport.DataSources.Add(rds);
reportViewer1.RefreshReport();
当页面加载时,此页面接受来自构造函数的数据集值,并在上面的代码中使用它。到目前为止,这是一场磨难,但我认为这可能很接近。我认为问题可能是找不到报告文件,尽管它不再抛出那个错误。现在,当我创建报表文件(Report1.rdlc)时,它会与其他表单文件一起出现。我读到的是,在RUNTIME上,它会被定位在/bin OR/release文件夹中,但它似乎不在那里,我也无法将其复制到那个位置。我找不到实际路径在哪里,只能找到它未运行时的路径。所以首先,我不确定我是否有正确的代码来创建报告,但它不再抛出任何错误。视图显示只是说它找不到此文件。第二,我应该指向哪里,以便此代码(或任何代码)具有正确的文件路径,从而可以创建报告。最后,我不理解需要数据集名称的参数,所以我只是从我发现的一些应该有效的代码示例中复制了一些。我在属性表中将"生成操作"更改为"嵌入资源",还将"将副本复制到输出"更改为了"始终复制"(尽管这对我来说从未奏效)。请帮忙。一个简单、清晰的代码片段将大大帮助我恢复理智!非常感谢。
使用安装程序安装应用程序后,将ReportPath
设置为Application.StartupPath
+<report name>
(最好使用Path.Combine而不是字符串串联)可能是正确的。
但在调试过程中,您必须考虑:
- 编译的文件(
exe
、dll
等)位于bin
文件夹(bin
、bin'Debug
或bin'Release
)中 rdlc
文件保留在原始项目文件夹中
因此,您可以实现这样的功能(抱歉是VB.NET代码):
Private Function strRdlcFilePath(ByVal strRdlcFile As String) As String
If Debugger.IsAttached And IO.File.Exists(IO.Path.Combine("<path to your project folder>", strRdlcFile)) Then
strRdlcFilePath = IO.Path.Combine("<path to your project folder>", strRdlcFile)
ElseIf Not Debugger.IsAttached And IO.File.Exists(IO.Path.Combine(Application.StartupPath, strRdlcFile)) Then
strRdlcFilePath = IO.Path.Combine(Application.StartupPath, strRdlcFile)
Else
'worst case: use an OpenFileDialog to manually select your rdlc file
strRdlcFilePath = "YourOpenFileDialog.FileName"
End If
End Function
为了将ReportPath
设置为:
reportViewer1.LocalReport.ReportPath = strRdlcFilePath("Report1.rdlc")
关于数据集问题,我认为您的代码是正确的,但之前声明了DataTable
,最好使用:
ReportDataSource rds = new ReportDataSource(dt.TableName, dt);