将数据网格视图转换为报表查看器

本文关键字:报表 转换 数据 数据网 网格 视图 | 更新日期: 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而不是字符串串联)可能是正确的。

但在调试过程中,您必须考虑:

  • 编译的文件(exedll等)位于bin文件夹(binbin'Debugbin'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);