我最近一直在研究报告查看器,我有一个问题我无法解决......
我正在尝试绑定来自对象集合(标题)的数据,其中每个对象都有一个子对象(行)集合。如何才能做到这一点?下面是我目前拥有的一些代码(somedata是一个头对象的集合)。
带有ReportViewer控件的Windows窗体具有以下内容:
reportViewer1.ProcessingMode = ProcessingMode.Local;
reportViewer1.LocalReport.LoadReportDefinition(GetReport());
reportViewer1.LocalReport.DataSources.Clear();
var dataSourcesNames = GetDataSourceNames();
var headerSource = new ReportDataSource(dataSourcesNames[0], somedata);
reportViewer1.LocalReport.DataSources.Add(headerSource);
reportViewer1.RefreshReport();
标题对象:
public class ReportHeader{
readonly string id;
readonly List<ReportRow> rows;
public ReportData(Header h) {
this.id = h.Id;
rows = new List<ReportRow>();
foreach(RowObject o in h.Rows){
rows.Add(new ReportRow(o));
}
}
public string Id { get { return id; } }
public List<ReportRow> Rows { get { return rows;} }
}
行对象:
public class ReportRow{
readonly decimal sum;
readonly string type;
readonly string code;
public ReportDataRow(RowObject r) {
sum = r.Sum;
type = r.Type;
code = r.Code;
}
public decimal Sum { get { return sum; } }
public string Type { get { return type; } }
public string Code { get { return code; } }
}
我创建了一个报告,其中包含ReportHeader的所有属性以及应包含所有ReportRows的列表,但它似乎不起作用。唯一的解决方案是创建两个单独的集合,ReportHeader集合和ReportRow集合,然后单独绑定它们,如下所示:
var headerSource = new ReportDataSource(dataSourcesNames[0], somedata);
reportViewer1.LocalReport.DataSources.Add(headerSource);
var rowSource = new ReportDataSource(dataSourcesNames[1], somedata.Rows);
reportViewer1.LocalReport.DataSources.Add(rowSource);
通过这个解决方案,我需要在集合之间建立某种关系..?所以请帮忙。 (请注意,我为我的问题简化了很多对象)
答案 0 :(得分:0)
如果我理解你的问题。你可以直接传入一个bool对象isHeader,然后在你的.rdlc文本框中你的可见性做一个函数= Fields!isHeader.value。如果您将所有字段分层并正确隐藏,则可以在同一列中包含标题AND数据。