【发布时间】:2016-05-27 09:13:52
【问题描述】:
继之前关于报表查看器中的动态列的问题之后,我想我至少会尝试让事情正常运行。
显示的输出是数学因子列,每个都有自己唯一的名称。这些因素(可以选择从 1 到 10 的任何数字)在我的 DataGridView 控件中显示没有问题 - 我通过根据需要添加行/列来生成 DataTable,然后将数据表设置为 DataGridView 的数据源。
我在我的 WinForm 中添加了一个 ReportViewer,并生成了一个 RDLC 文件。我的 RDLC 设置了 10 列(因为我知道永远不会超过这个),而不是花费数小时试图弄清楚如何使其动态化,并将 DataSet 分配给我的 ReportViewer 控件。然后我使用以下代码将数据分配给查看器:
DataTable dt = new DataTable();
var source = this.dgvSelectedElements.DataSource;
while (source is BindingSource)
{
source = ((BindingSource)source).DataSource;
}
var table = source as DataTable;
if (table != null)
{
dt = table;
var reportSource = new ReportDataSource("FactorReport", dt);
this.reportViewer1.Reset();
this.reportViewer1.ProcessingMode = ProcessingMode.Local;
this.reportViewer1.LocalReport.ReportPath = "FactorReport.rdlc";
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(reportSource);
this.reportViewer1.RefreshReport();
}
这就是 DataGridview 的外观:
然后,这是 Reportviewer - 注意底部的两个“Rate”和“Mult”行
因此,虽然它似乎有效,但我看不到网格中的值。另外,当年龄超过100时,年龄排序不正确-可以关闭排序吗?假设我可以让它工作,是否可以遍历 ReportViewer 并修改列标题?快速谷歌告诉我不是在运行时?
【问题讨论】:
-
您可能会发现我的新帖子很有用:Create RDLC report dynamically at run-time from a DataGridView.
标签: c# winforms datagridview reportviewer