介绍如何在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,请同仁们指正。