2016-10-03 56 views
0

我试图将DataGridView作为数据源用于报表,我想在报表中显示DataGridView中的表。我搜索,我发现这里的代码,以便告诉我做这样的事情:在我的报表生成报告使用DataGridView作为报表查看器的数据源

private void GenerateReport_Click(object sender, EventArgs e) 
{ 
    ReportForm reportForm = new ReportForm(DataGrid); 
    reportForm.ShowDialog(); 
} 

按钮:

private DataGridView grid; 

private void ReportForm_Load(object sender, EventArgs e) 
{ 
    DataTable dt = (DataTable)grid.DataSource; 
    dt.TableName = "reportSource"; 

    reportViewer1.ProcessingMode = ProcessingMode.Local; 
    ReportDataSource rds = new ReportDataSource("reportSource", dt); 
    reportViewer1.LocalReport.DataSources.Clear(); 
    reportViewer1.LocalReport.DataSources.Add(rds); 
    this.reportViewer1.RefreshReport(); 
    } 

ReportForm的构造

public ReportForm(DataGridView grid) 
{ 
    InitializeComponent(); 
    this.grid = grid; 
} 

但我有一个空的报告。

+0

你收到一个异常或报表查看器显示任何错误? –

+1

您不应该向我们展示您的ReportForm的构造函数吗?将您的构造函数的参数更改为传递DataTable,而不是整个网格控件。 – LarsTech

+0

不只是一个空的表单,我将使用ReportForm的构造函数更新问题,但我已经尝试传递dataTable,并得到相同的结果。 – user3670112

回答

0

我解决我的问题在我的应用程序添加一个DataSet对象,然后我用这个代码:

 private void ReportForm_Load(object sender, EventArgs e) 
     { 
      DataTable dt = (DataTable)grid.DataSource; 
      ProgrammersDataSet ds = new ProgrammersDataSet(); 
      ds.Tables.Add(dt.Copy()); 
      ds.Tables[1].TableName = "ProgrammersDataSet"; 
      ReportDataSource rds = new ReportDataSource(ds.Tables[1].TableName, ds.Tables[1]); 

      reportViewer1.ProcessingMode = ProcessingMode.Local; 
      reportViewer1.LocalReport.DataSources.Clear(); 
      reportViewer1.LocalReport.DataSources.Add(rds); 
      reportViewer1.LocalReport.Refresh(); 
      reportViewer1.LocalReport.ReportEmbeddedResource = "Cerocha.Presentation.Reports.ProgrammersReport.rdlc"; 
      this.reportViewer1.RefreshReport(); 
     } 
相关问题