SQL Reporting Services 与动态列报表






4.15/5 (30投票s)
2005 年 8 月 9 日
3分钟阅读

368604

1781
一篇关于生成动态列报表的文章。
引言
大家好,这是我第二次接到动态创建报表列的任务。第一次,我通过首先将数据绑定到 DataGrid
(通过将自动生成的列功能设置为 true,然后导出到 Excel)来完成。第二次,任务是生成 PDF 报告。
然后我不得不依靠 SQL Reporting Services 来创建动态布局。
背景
对于基本报表创建,请参考其他文章。在 Code Project 中有很多。
使用代码
我将在本文中解释如何创建动态列。我们开始吧。
步骤 1。我的表中包含 5 个字段(Col1、Col2、Col3、Col4、Col5)。
步骤 2。我希望报表的输出基于报表接收的参数。例如,如果输入报表的是 1,它应该显示 Col1,如果输入是 2,那么它应该显示 Col2 & Col3,以此类推(请参阅存储过程,您可以根据您的要求更改它)。
然后我创建了一个存储过程
<!--this procedure is for Showing an example and you have
to follow your own standards and Author is Not giving any guarantee that this
code will work-->
CREATE PROCEDURE USP_Dynamic
@Num int AS
SET NOCOUNT ON
IF @Num=1
Begin
select Col1 ,'a' as NumRows from tblDynamic
End
else IF @Num=2
Begin select Col2,Col3,'bc' as NumRows from tblDynamic
End
else IF @Num=3
Begin
select Col3,Col4,Col5,'cde' as NumRows from tblDynamic
End
else If @Num=4
Begin
select Col1,Col3,Col4,Col5,'acde' as NumRows from tblDynamic
End else
Begin
select Col1,Col2,Col3,Col4,Col5,'abcde' as NumRows from tblDynamic
End
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
在存储过程中,如果输入是 1,那么输出将是 Col1。这很容易理解。“NumRows”列是为了让报表理解存储过程的输出。例如,如果 NumRows="a",那么输出将包含第一列,如果 NumRows="ab",那么输出将包含第一列和第二列。逻辑是每个字母将指示一列。“a”表示第一列,“b”表示第二列,“c”表示第三列,“d”表示第四列,“e”表示第五列。 “NumRows”值中缺少任何字母表示该列不存在。基于此,报表将隐藏该列。
步骤 3。我创建了一个新的报表项目(在 CodeProject 中,浏览关于如何创建 SQL 报表的文章)。
步骤 4。我添加了一个共享数据源,以连接到 ServerName 上的数据库 TestDB。
步骤 5。我创建了一个新的报表(在 Code Project 中,浏览关于如何创建 SQL 报表的文章)。
步骤 6。我在报表中创建了一个数据集 (DataSet1
)(在 Data 选项卡中)。
步骤 7。在 Layout 选项卡中,我手动添加了数据库表中的所有五个字段(Col1、Col2、Col3、Col4、Col5)。
步骤 8。我向报表添加了一个表(如果在报表中已经有一个表,请跳过此步骤),并将所有列字段拖到该表中。
步骤 9。我将 "DataSet1
" 设置到该表。
步骤 10。在每个表列的 visibility--Hidden 属性表达式中,我添加了以下代码,以根据存储过程输出隐藏该列。在第一列中应该是“a”,在第二列中应该是“b”,在第三列中应该是“c”,在第四列中应该是“d”,在第五列中应该是“e”。这是用于根据存储过程输出隐藏列。有关更多详细信息,请参见存储过程。
<!--this procedure is for Showing an example and you have
to follow your own standards and Author is Not giving any guarantee that this
code will work-->
//For First Column
=IIF(InStr( Fields!NumRows.Value,"a")=0,True,False)
//For Second Column
=IIF(InStr( Fields!NumRows.Value,"b")=0,True,False)
//For Third Column
=IIF(InStr( Fields!NumRows.Value,"c")=0,True,False)
//For Fourth Column
=IIF(InStr( Fields!NumRows.Value,"d")=0,True,False)
//For Fifth Column
=IIF(InStr( Fields!NumRows.Value,"e")=0,True,False)
步骤 11。完成。它已准备好生成动态列。只需预览,它会要求输入一个数字,输入 1 或 2 或 3 等。你的动态报表已准备就绪。现在你可以将其导出为 PDF、Excel 或 SQL Reporting 支持的任何格式。
关注点
我已经学会了用程序员的铲子挖掘 SQL Reporting Services。