DataView Web Part参数与过滤查询

参数源的种类

在SharePoint的无代码的定制化开发时,DataView应该是比较重要的控件,可以用它来展现包括SharePoint和数据库等数据源的数据,在它的控件里面,有个很重要的东西就是”参数”,在用它来实现参数化查询时尤其重要,它的参数源的类型如下所示:

dataViewParameterDialog

  • 无:这种参数没有指定任何的参数源,它的来源需要靠其它WebPart与它相连,然后为其提供参数,例如使用Form WebPart或者各种Filter的WebPart.
  • 控件:这里的控件指的是服务器端控件,在DataView所在的页面发生回调时,会将控件的值赋给这个参数
  • Cookie:在发生回调时,从Cookie中获取值
  • 表单:这里指的是客户端控件,即Input这类的控件,如果是使用静态控件或者包含了静态控件的服务端控件(例如Form WebPart)时,可以把参数定义成这种类型的数据源
  • 查询字符串:即URL中问号(?)部分的参数
  • 服务器变量:这个是指服务器端Request.ServerVariables中的变量值.而且SharePoint对这些服务器端的变量也做了一些扩展,比如LOGON_USER这个变量,就是用来记录当前的登录用户的

参数与筛选

在DataView中进行筛选包括两种方式:

  1. 通过CAML对List的查询:这种查询是通过将过滤条件传递给了数据库来获取数据,通过一定的条件来限定从服务器获取的数据.
  2. 通过XSLT对XML的查询:这种查询是从已经从服务器获取的数据中,通过在XSLT中指定XPath来过滤向前台展现的数据,它与通过CAML过滤的区别在于:这种方式是一种”假”过滤,如果是比较大的查询对效率的影响会比较明显.

在以上两种查询中,都可以指定参数来实现动态的过滤筛选.

参数源为”无”时使用WebPart的Connection来提供参数实现过滤

新建一个页面,然后通过拖拽向其中添加一个DataView控件,然后再添加一个Text Filter控件,然后在DataView中新建一个ParamTitle的参数,参数源选择”无”.建立DataView与Text Filter的连接,如下图所示:

noneConn1

点下一步后,选择”连接到该网页的其它Web部件”,出现发下图所示:

noneConn2

选择”下一步”后,分别选中要进行连接的两个值,如下图所示:

noneConn3

点击”下一步”后选择”完成”.

这就建立起来了两个WebPart之间的关联,即可以在发生页面的回调时,由Text Filter控件的值来为DataView的参数进行赋值,然后就可以用参数来实现诸如过滤这样的功能.要设置过滤条件,可以通过DataView的”筛选”来实现,如下图所示:

noneConn4

在这里可以通过使用”添加XSLT筛选”来实现,但是就像我上面说的,这种方式是通过将数据全取过来后,通过XPath的过滤实现的,大数据量会有效率问题.而在这个表格中添加的过滤则是通过定义了CAML的语句来实现的,效率较好.

如上所示操作完成后,就可以实现过滤了,如下图所示:

noneConn5

其它几种方式都与这个类似,不同的时如果使用有相应参数源的参数,则就可以不用设置WebPart之间的关联了(例如参数源为”控件”这种方式,如果页面中有一个服务器端的TextBox,则只需要在定义参数时指定服务器端控件的ID,这样在发生页面回调时,DataView会自动取到TextBox中的值,然后就可以进一步来使用参数了).

但是这些方式中都无法实现”在多条件时,当条件为空时而不使用此条件”这种要求,这时可能就需要通过在页面中定义嵌入服务端代码(这降低了安全性)或者自定义的WebPart(可以试着做成通用的)来实现对DataView控件的SelectCommand属性设置动态的CAML语句来实现过滤了.

posted @ 2010-01-31 22:53  吴东雷  阅读(615)  评论(0编辑  收藏  举报