M$的Reporting Service 如何实现参数[转贴]
2005-10-05 09:26
218 查看
介绍如何在Sql Server Report中编程实现可选参数
最近花一些时间研究了一下Microsoft Sql report services,总体感觉功能十分强大,但在学习的过程中,发现报表参数对话框中的允许空值在选中后,并不像我期望的那样在预览报表时选择Null后系统会忽略此参数的存在,而是将参数赋为null,从而不会返回任何数据。
我想在报表中实现可选的参数,以便用户根据系统提供的多种条件任意选择其中的参数,来获取感兴趣的数据。所幸Microsoft Sql report services提供的强大的编程能力能够达到这个目的。为了书写的方便,在本文的以后篇幅中,我将Microsoft Sql report services简写为Sql Report。
首先介绍一下如何通过编程来扩充sql Report,Sql Report 支持两种编程方式,一是通过引用.net装配件,二是直接在报表中内嵌vb.net代码,两者各有优缺点,就像vs.net2003中的 Asp .net CodeBehind与vs.net2005中的CodeInside差别,使用内嵌vb.net代码在部署报表时比较方便,因为实现可选参数这样的功能较为简单,我选择了这个内嵌方式。在本文后面,我会简单介绍如何引用装配件。
好吧,就让我们象挑选一辆汽车开始我们的编程之旅吧,首先,我们要从各种媒体中获得一些车子的数据,这些媒体如报纸(老土吗?)、电视、网站等等,这些媒体就是我们的数据库,但是数据太多了,我们的脑子要爆炸了,怎么办?自然是根据我们的条件筛选数据了。在筛选数据之前,先让我们连入数据库,创建一个数据源。
在vs.net中开始一个商业智能项目,选择报表项目,你会发现马上有一个中介人想要引导你完成对数据库的访问,他就是报表向导,因为我很内向,又想自己DIY我的车子,我选择了取消,但我表示了感谢。
在解决方案资源管理器右击“共享数据源”,在菜单中选择“添加新的数据源”,选择一个数据库,设置界面就像ODBC一样,很亲切。
在解决方案资源管理器右击“Reports”,“添加新项”选择添加一个空报表,如果选择“添加新报表”,望眼欲穿的中介人又会友好的走到你的面前,不好意思吧!
我们在上面创建了一个新的报表,名称叫Report1.rdl,单击它会出现她的设计界面,有三个标签,分别是数据、布局、预览,为了设计的方便,我们先选择数据标签,创建一个数据集,这里有我们的车子信息,我们可以选择数据集设计器,或者直接键入Sql语句,在界面中会显示相应的字段。我们在工具箱中Report Items选择”表”,将它拖到布局界面中去,这时候我们选择感兴趣的字段拖入到表中,一个简单的报表就这样完成了。
选择预览,晕倒,所有的数据都显示了出来,别急,我们在报表菜单中选择报表参数,在这里我们可以增加多个参数,取决您的喜好,如车子的品牌、发动机排气量、轮胎的软硬程度等,填入我们的参数后,关闭窗口。
下面我们开始订制我们的数据集,选择“数据标签”,编辑数据集,在“查询字符串中键入下列字符串:
="SELECT * FROM View_Pole" & Code.GenWhereString(Parameters!LineName.Value,Parameters!PoleName.value,Parameters!BranchName.Value,Parameters!PoleSort.value,parameters!Coding.value)
上述的Code.GenWhereString()是Sql Report内嵌代码的表示形式,以Code.开头,您还可以看到参数的表示形式,如Parameters!ParanetersName.Value,GenWhereString()就是我们要订制的自定义代码,那么,它放在哪里,跟我来。
选择“报表”菜单,接下泪单击“报表属性”,在弹出的窗口中有一个“代码”标签,我们可以在这里键入我们的代码,但这里条件相当艰苦,没有语法加亮,没有查错,键入代码如下:
public Function GenWhereString(LineName as string,PoleName as string,BranchName as string,PoleSort as string,Coding as string) as string
dim IsCondition as Boolean
dim pWhereString as string
if LineName<>"" then
pWhereString=" where LineName='" & LineName & "'"
IsCondition=true
end if
if PoleName<>"" then
if IsCondition then
pWhereString=PWhereString & " and PoleName='" & PoleName & "'"
else
pWhereString=" where PoleName='" & PoleName & "'"
IsCondition=true
end if
end if
if BranchName<>"" then
if IsCondition then
pWhereString=pWhereString & " and BranchName='" & BranchName & "'"
else
pWhereString=" where BranchName='" & BranchName & "'"
IsCondition=true
end if
end if
if PoleSort<>"" then
if IsCondition then
pWhereString=pWhereString & " and PoleSort='" & PoleSort & "'"
else
pWhereString=" Where PoleSort='" & PoleSort & "'"
IsCondition=true
end if
end if
if Coding<>"" then
if IsCondition then
pWhereString=pWhereString & " and Coding='" & Coding & "'"
else
pWhereString=" Where Coding='" & Coding & "'"
IsCondition=true
end if
end if
return pWhereString
End Function
代码没有缩进,没办法,粘贴后走样了,而且代码好像与汽车无关,这是我做的一个电力设备的一个项目,但万物皆对象,汽车与设备没什么不同。
预览一下报表,指定其中的几个报表,其他的都选择Null,生成,OK。梦想中的法拉利终于到手。
最后,我们如何引用一个装配件呢?在属性窗口中选择报表,设置References,选择我们的装配件即可。
我是一名Basic,请同仁们指正。
最近花一些时间研究了一下Microsoft Sql report services,总体感觉功能十分强大,但在学习的过程中,发现报表参数对话框中的允许空值在选中后,并不像我期望的那样在预览报表时选择Null后系统会忽略此参数的存在,而是将参数赋为null,从而不会返回任何数据。
我想在报表中实现可选的参数,以便用户根据系统提供的多种条件任意选择其中的参数,来获取感兴趣的数据。所幸Microsoft Sql report services提供的强大的编程能力能够达到这个目的。为了书写的方便,在本文的以后篇幅中,我将Microsoft Sql report services简写为Sql Report。
首先介绍一下如何通过编程来扩充sql Report,Sql Report 支持两种编程方式,一是通过引用.net装配件,二是直接在报表中内嵌vb.net代码,两者各有优缺点,就像vs.net2003中的 Asp .net CodeBehind与vs.net2005中的CodeInside差别,使用内嵌vb.net代码在部署报表时比较方便,因为实现可选参数这样的功能较为简单,我选择了这个内嵌方式。在本文后面,我会简单介绍如何引用装配件。
好吧,就让我们象挑选一辆汽车开始我们的编程之旅吧,首先,我们要从各种媒体中获得一些车子的数据,这些媒体如报纸(老土吗?)、电视、网站等等,这些媒体就是我们的数据库,但是数据太多了,我们的脑子要爆炸了,怎么办?自然是根据我们的条件筛选数据了。在筛选数据之前,先让我们连入数据库,创建一个数据源。
在vs.net中开始一个商业智能项目,选择报表项目,你会发现马上有一个中介人想要引导你完成对数据库的访问,他就是报表向导,因为我很内向,又想自己DIY我的车子,我选择了取消,但我表示了感谢。
在解决方案资源管理器右击“共享数据源”,在菜单中选择“添加新的数据源”,选择一个数据库,设置界面就像ODBC一样,很亲切。
在解决方案资源管理器右击“Reports”,“添加新项”选择添加一个空报表,如果选择“添加新报表”,望眼欲穿的中介人又会友好的走到你的面前,不好意思吧!
我们在上面创建了一个新的报表,名称叫Report1.rdl,单击它会出现她的设计界面,有三个标签,分别是数据、布局、预览,为了设计的方便,我们先选择数据标签,创建一个数据集,这里有我们的车子信息,我们可以选择数据集设计器,或者直接键入Sql语句,在界面中会显示相应的字段。我们在工具箱中Report Items选择”表”,将它拖到布局界面中去,这时候我们选择感兴趣的字段拖入到表中,一个简单的报表就这样完成了。
选择预览,晕倒,所有的数据都显示了出来,别急,我们在报表菜单中选择报表参数,在这里我们可以增加多个参数,取决您的喜好,如车子的品牌、发动机排气量、轮胎的软硬程度等,填入我们的参数后,关闭窗口。
下面我们开始订制我们的数据集,选择“数据标签”,编辑数据集,在“查询字符串中键入下列字符串:
="SELECT * FROM View_Pole" & Code.GenWhereString(Parameters!LineName.Value,Parameters!PoleName.value,Parameters!BranchName.Value,Parameters!PoleSort.value,parameters!Coding.value)
上述的Code.GenWhereString()是Sql Report内嵌代码的表示形式,以Code.开头,您还可以看到参数的表示形式,如Parameters!ParanetersName.Value,GenWhereString()就是我们要订制的自定义代码,那么,它放在哪里,跟我来。
选择“报表”菜单,接下泪单击“报表属性”,在弹出的窗口中有一个“代码”标签,我们可以在这里键入我们的代码,但这里条件相当艰苦,没有语法加亮,没有查错,键入代码如下:
public Function GenWhereString(LineName as string,PoleName as string,BranchName as string,PoleSort as string,Coding as string) as string
dim IsCondition as Boolean
dim pWhereString as string
if LineName<>"" then
pWhereString=" where LineName='" & LineName & "'"
IsCondition=true
end if
if PoleName<>"" then
if IsCondition then
pWhereString=PWhereString & " and PoleName='" & PoleName & "'"
else
pWhereString=" where PoleName='" & PoleName & "'"
IsCondition=true
end if
end if
if BranchName<>"" then
if IsCondition then
pWhereString=pWhereString & " and BranchName='" & BranchName & "'"
else
pWhereString=" where BranchName='" & BranchName & "'"
IsCondition=true
end if
end if
if PoleSort<>"" then
if IsCondition then
pWhereString=pWhereString & " and PoleSort='" & PoleSort & "'"
else
pWhereString=" Where PoleSort='" & PoleSort & "'"
IsCondition=true
end if
end if
if Coding<>"" then
if IsCondition then
pWhereString=pWhereString & " and Coding='" & Coding & "'"
else
pWhereString=" Where Coding='" & Coding & "'"
IsCondition=true
end if
end if
return pWhereString
End Function
代码没有缩进,没办法,粘贴后走样了,而且代码好像与汽车无关,这是我做的一个电力设备的一个项目,但万物皆对象,汽车与设备没什么不同。
预览一下报表,指定其中的几个报表,其他的都选择Null,生成,OK。梦想中的法拉利终于到手。
最后,我们如何引用一个装配件呢?在属性窗口中选择报表,设置References,选择我们的装配件即可。
我是一名Basic,请同仁们指正。
相关文章推荐
- 再谈ReportingService报表中数据源类型为存储过程的数据集如何使用多值参数
- 在ReportingService中添加多维模型的参数查询
- android如何实现开机自动启动Service或app
- C# 使用多线程如何传递两个以上参数的实现方法(附示例) 推荐
- android如何实现开机自动启动Service或app(转)
- [c#]Webservice中如何实现方法重载(overload)以及如何传送不能序列化的对象作参数
- android如何实现开机自动启动Service或app
- 在实现ReportServer的时候,如何判断当前传入的参数值为null
- 如何实现参数个数可变的函数
- ReportingService的RDLC报表自定义聚合实现
- 详解如何实现定义一个参数个数可变的函数
- 【转载】JQuery中如何传递参数如click(),change()等具体实现
- 如何开发j2ee框架之jvn篇,实现过滤静态文本跟参数转成实体类
- Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色
- android如何实现开机自动启动Service或app
- MyEclipse中,当我们写一个类实现一个接口时,会自动生成重写该接口的方法,但是,方法的参数提示不够好,是什么原因导致的呢?该如何解决呢?
- get与post区别详解,session与cookie区别,转发和重定向区别,如何实现session共享,webservice与httpservice区别
- android如何实现开机自动启动Service或app
- reporting service 关于参数问题
- C中如何实现C++中的默认参数?