关于XSLT分栏显示技巧
今天在用sharepoint 2007定制一个列表时,需要将数据分栏显示,比较复杂的是数据先要分组,将重复的记录过滤掉,Sharepoint提供了一个方法将数据分组,代码如下
<xsl:variable name="NewGroup_1">
<xsl:choose>
<xsl:when test="not ($dvt_groupfield)"><xsl:value-of select="ddwrt:NameChanged(string(@Title), 1)" /></xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
....
<xsl:when test="not($dvt_groupfield) and (not($NewGroup_1='') and position() >= $FirstRow and position() <= $LastRow or ($FirstRow = position()))">
.....
</xsl:when>
如果没有分组,我可以通过position() mod 分栏数 = 0 来判断分栏位置,如下代码4列分行
<xsl:if test="(position() mod 4) = 0">
<br/>
</xsl:if>
但是数据是通过分组获得,position()不是真正的当前记录号,可能是一个断断续续的一组数字,想了很多办法没有一个简单的取到分组后的记录号值,最后解决是通过样式表和宽度来解决:
每一组数据显示内容:
<div style="float:left;width:150px;margin-top:35px;">
.... 显示内容
</div>
内容外的表格设置
<table border="0">
<tr><td width="600px">
这里的宽度是根据4列内容是大宽度设置,div当超过宽度后自动换行
我想这是一个取巧的方法,如果样式要求比较复杂时可能要另想办法,我想这个方法还可以写得更复杂一些,通过修改一个列数参数达到改变栏数的目的,如果哪一位朋友有更好的方法,请告诉我,谢谢!