我在创建.rdlc报告时遇到问题 . 本报告的重点是显示 Bus 车路线上的乘客数量(它具有该路线上每个车站的乘客数量) . 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 回答
可能不是你想听到的答案,但是在RDLC中动态创建列是相当困难的(至少我无法让它工作) .
如果可能的话,我会建议这个(有点不干净)的解决方案:尽可能多地创建你的 table :
然后为每个Station列添加一个可见性表达式,即
iif(StationB > -1, true, false)
. 然后,只有在设置值时才会显示列 . 当然,这意味着您必须提前定义所有站点(并维护它们) . 因此,如果你有50个站将是一个痛苦的幕后 .Alternative
如果你有很多站点,我个人会建议寻找其他报告生成器,如Crystal Reports(注意我自己没有经验,虽然它在搜索RDLC解决方案时经常穿过我的路径) .
Format your data
阅读完编辑后,听起来您的数据集结构不太实用 . 我建议填写一个更符合你想要显示的自定义对象,并在你的RDLC中使用它 .
以下问题涉及:Use custom objects as the source for Microsoft Reports (.rdlc)
这个链接基本上就是答案:http://www.gotreportviewer.com/objectdatasources/index.html