如果对DatFormWebPart了解很少,可以参考一下前一篇文档DataFormWebPart 单列表查询
为了方便样式和过滤条件的设置,DataFormWebPart跨列表查询 首选以一个List或者Library为原型,
原原本本按照单列表查询来设置,
可以参考 ,这时 SPD2007版本Microsoft SharePoint Designer Team Blog,还是很具有参考性
都设置好后
1.把DataSourceMode="List" 修改成CrossList
2.在SelectCommand的view 后面添加类似下面的
这是很类似SPSiteDataQuery的语法,
实际上,后台就是调用SPSiteDataQuery, CQWB也是,所以都悲剧的不支持Multi-value lookup字段的查询
这个RowLimit就是限制返回的总数
<Lists ServerTemplate='101' BaseType='1'></Lists>
<RowLimit>200</RowLimit>
这里也可以自己写好caml语句,直接替换 selectcommand
例如,
注意
1 .如果是lookup或者是user类型最好 加上type=lookup
2. 如果字段可能在可以某些列表不存在,Nullable=true,
切记:Nullable最大数量为8,超过了8,也将不返回任何数据(管理中心可以配置)
3. 查询某内容类型及子类型
<FieldRef Name='L_x0020_V' Nullable='True' Type='Lookup'/><FieldRef Name='FSObjType'/><FieldRef Name='ServerUrl'/></ViewFields><RowLimit>200</RowLimit></View>
基本就大功告成。
最后参考
http://blog.gutek.pl/post/2008/07/04/Global-Tasks-View-Web-Part.aspx
删除几个几个地方就好了,
说很容易,其实也很容易出错的
我这里只说一下很需要注意的地方
1.过滤条件(Filter)尽量在修改成CrossList前配置后
其一:为什么呢? 因为当你设置为 CrossList后,字段过滤名称会改变的,
例如,某字段名称为 L V,其InnerName将为 L_x0020_V,SPD的Filter中会显示为 L_0x500F_0x0020_V,
你这时候设置过滤,将不能正确的Filter ,
为什么呢?你这个Filter 设置将转为 SPDataSource的SelectCommand,
而SelectCommand需要的是 InnerName,那么将不能正确查询
所以如果后设置过滤条件,只是麻烦些
找到SelectCommand中,找到对应的FieldRef Name =对应的地方,修改过来就ok
其二:
修改为CrossList后,例如Greater Than,Less Than的语句会消失,
这也没关系,找到对应的SelectCommand修改过来
有人就会问,那直接写好Caml语句,替换SelectCommand就好了,是可以这么做的,
2 .如果字段有空格或者特殊字符等,确保检查
例如 L V,应该如下,
3。表头 切记检察
L V应该如下
<xsl:with-param name="fieldname">@L_x0020_V</xsl:with-param>
<xsl:with-param name="fieldtitle">L V</xsl:with-param>
<xsl:with-param name="displayname">L V</xsl:with-param>
<xsl:with-param name="sortable">1</xsl:with-param>
<xsl:with-param name="fieldtype">x:string</xsl:with-param>
</xsl:call-template>