创建具有可变列数的rdlc报告

时间:2013-01-22 09:44:11

标签: c# reporting rdlc

我在创建.rdlc报告时遇到问题。本报告的重点是显示公交车路线上的乘客数量(它具有该路线上每个车站的乘客数量)。 DataSet充满了一个存储过程(我无法更改)。每条路线的数据由2部分组成 - 第一部分具有特定路线上的车站名称(有列表示乘客数量,但是它们的值为空),第二部分包含乘客数量为每个站。这两个部分都是相同存储过程的结果,它们显示在同一个表中。 我遇到的问题是每条路线都有不同数量的电台。 所以我的问题是 - 如何制作一个适应特定路线上车站数量的报告(或子报告)(列数应与路线上的车站数相同)。值得一提的是,应在同一报告上显示具有不同站数的路线。 我正在使用VS 2010和C#来创建生成此报告的应用程序。 你能帮我解决这个问题吗? 感谢

实施例 不幸的是,我不允许诽谤特定数据,但我会尽力为您提供必要的信息。 存储过程的结果具有以下结构: Route_ID | Departure | DataType | StationName | Passengers1....Passengers61 该报告按Route_ID分组。 DataType值定义行是否包含站的名称(结果的第一部分)或乘客的数量(第二部分)。例如,如果路线有3个站点和一个出发点,则该组将有4行 - 前3个将包含Route_ID,DataType和StationName(每个行具有不同的StationName,前2个参数将相同),其他列将具有空值。第二部分包括Route_ID,DataType(与前一部分不同)和乘客列中的值(同样,其他列将为null)。所以我需要一个子报表,其列数与第一部分的行数相同。我知道这很复杂,但整个问题非常复杂。

1 个答案:

答案 0 :(得分:1)

可能不是你想听到的答案,但是在RDLC中动态创建列很难(至少我无法让它工作)。

如果可能,我会建议这个(有点不干净)的解决方案: 尽可能多地创建您的桌子:

BUS | StationA | StationB | StationC | StationD | ..
X9Z | 4 people | 5 people | 0 people | 9 people | ..

然后为每个Station列添加一个可见性表达式,即iif(StationB > -1, true, false)。 然后,只有在设置值时才会显示列。当然,这意味着您必须提前定义所有站点(并维护它们)。所以,如果你有50个站点,那将是一个痛苦的背后。

<强>替代

如果您有很多电台,我个人会建议寻找其他报告生成器,例如Crystal Reports(注意我自己没有这方面的经验,尽管在搜索RDLC解决方案时它经常穿过我的路径)。

格式化数据

阅读完编辑后,听起来您的数据集结构不太实用。我建议填写一个更符合你想要显示的自定义对象,并在你的RDLC中使用它。

以下问题涉及:Use custom objects as the source for Microsoft Reports (.rdlc)

此链接基本上就是答案:http://www.gotreportviewer.com/objectdatasources/index.html