转载:SharePoint:扩展DVWP - 第1部分:布局增强 – 在默认值模板和编辑模板中重新排列栏
SharePoint:扩展DVWP - 第1部分:布局增强 – 在默认值模板和编辑模板中重新排列栏
当我们在数据视图中启用编辑,删除模式的链接时,SPD总是将链接添加到左边。 而我本来希望添加到右侧。所以需要对其进行移动。 对于一般的数据栏调整顺序,我们可以借助数据视图本身的“编辑列”功能。但是其中并不包含编辑/删除链接的栏。
注:本文中,我们只是关注于默认值模板和编辑模板。插入模板将在接下来的文章中单独讨论。
我们做不到什么?
首先,让我们来讨论一下哪些操作是行不通的。一些移动栏的常规操作(或者说从设计角度看起来应该可行的操作),在这里却会出现问题。
行不通的步骤
在SPD的设计视图中:
- 用鼠标右击包含链接的列,并点击“选择”>“列”。
- 再次右键单击并选择“剪切” 。
- 用鼠标右击最右侧的列,选择“插入”>“列(在右侧)”。
- 右键单击新插入的列,并选择“粘贴”。
- 用鼠标点击最右侧的列(仍然是空的)并选择“删除”>“删除列”
这些步骤看似本应没问题,可是很快你就会发现处于编辑模式时页面上的链接乱了:本应在编辑模式里由保存和取消链接取代默认模式里的 编辑和删除链接,可是没有出现,而且编辑/删除链接也并没有如我们计划的那样出现在右侧。
正确的做法是,我们需要编辑该页面的XSL(eXtensible Stylesheet Language,可扩展样式表语言 )。
重新排列包含编辑/删除操作的栏
我们需要移动三个部分,因为整个页面分为三个功能区,所有这些部分共同构成了包含编辑和删除链接的列:
- 表格的标题行
- 默认模板中的列
- 编辑模板中的数据列
1. 首先将光标移到标题栏的单元格内。
在拆分视图的设计窗格中,点击编辑/删除链接所处单元格顶部的单元格
点击编辑/删除链接上面的单元格
此时代码窗格将显示当前光标位置在代码中的哪个位置。
灰色的框显示的就是编辑/删除链接上面的单元格
由于我们准备移动链接栏到最右侧,所以也应该把相应的标题单元格移动对应位置。
很简单地修改原来的代码...
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<th class="ms-vh" width="1%" nowrap=""></th>
</xsl:if>
<th class="ms-vh" nowrap="">Title</th>
<th class="ms-vh" nowrap="">修改者</th>
<th class="ms-vh" nowrap="">修改时间</th>
...为...
<th class="ms-vh" nowrap="">Title</th>
<th class="ms-vh" nowrap="">修改者</th>
<th class="ms-vh" nowrap="">修改时间</th>
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<th class="ms-vh" width="1%" nowrap=""></th>
</xsl:if>
2. 然后移动默认模板的数据单元格
同样,在拆分视图的设计窗格中,点击 编辑 / 删除链接旁边的第一个单元格(不是该链接本身所处的单元格 )。
在设计窗格中,单击第一个字段,并从代码视图中找到相应的代码。
请注意,我们要移动的部分其实是在一个检查块中,好像是什么模式检查(if test="$dvt_1_automode = '1′")。不要担心所有的这些细节,只知道这是该模板的一部分,用来控制编辑和删除链接的显示就够了。 将整个<xsl:if>块移动到列表的末尾,这样就可以使其显示在最后(该行的最右侧 )。
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<td class="ms-vb" width="1%" nowrap="">
<xsl:call-template name="dvt_1.automode">
<xsl:with-param name="KeyField">ID</xsl:with-param>
<xsl:with-param name="KeyValue" select="ddwrt:EscapeDelims(string(@ID))" />
<xsl:with-param name="Mode">view</xsl:with-param>
</xsl:call-template>
</td>
</xsl:if>
<td class="ms-vb">
<xsl:value-of select="@Title"/>
</td>
<td class="ms-vb">
<xsl:value-of select="@Editor" disable-output-escaping="yes"/>
</td>
<td class="ms-vb">
<xsl:value-of select="ddwrt:FormatDate(string(@Modified), 2052, 5)"/>
</td>
...到...
<td class="ms-vb">
<xsl:value-of select="@Title"/>
</td>
<td class="ms-vb">
<xsl:value-of select="@Editor" disable-output-escaping="yes"/>
</td>
<td class="ms-vb">
<xsl:value-of select="ddwrt:FormatDate(string(@Modified), 2052, 5)"/>
</td>
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<td class="ms-vb" width="1%" nowrap="">
<xsl:call-template name="dvt_1.automode">
<xsl:with-param name="KeyField">ID</xsl:with-param>
<xsl:with-param name="KeyValue" select="ddwrt:EscapeDelims(string(@ID))" />
<xsl:with-param name="Mode">view</xsl:with-param>
</xsl:call-template>
</td>
</xsl:if>
保存该页面并在浏览器中查看,现在它现在看起来类似下面这样:
编辑/删除链接和标题中的空白都转移到最右边了
但是等等...点编辑后呢
由于我们的DVWP打开了编辑和删除模式,所以我们还有另一个视图需要修改,以使我们的链接在这两个视图中都位于最右侧。
如果你保存该页,并在浏览器打开,点击编辑链接时就发现,并不会打开EditForm.aspx,而是刷新当前页,所有可供编辑的字段以编辑控件的形式进行渲染。
编辑模板,正如浏览器中看到的。 请注意顶部标题行中的字段并没有正确的排列
看看SPD中是什么样子:
1. 当鼠标悬停在该Web部件上时右上角会显示一个右尖括号图标,点击该图标
2. 在弹出的菜单中的数据视图预览下拉列表框中选择编辑模板。
数据视图预览=编辑模板
注意到,现在我们的页面中有一个问题:标题行没有正确排列...
标题列总是往前错一个( 标题对链接;修改者对标题,依次类推)
这是因为每个模板都共用相同的标题行,但显示各自的数据行。但是,我们可以很容易地解决该问题,通过重复前面的步骤将保存 / 取消单元格移到最右边。
1. 在设计窗格中点击除链接字段以外的任意一个单元格,在代码窗格我们会发现,现在处于一个完全不同的模板 dvt_1.rowedit里。同样的方式,我们移动整个<xsl:if>块,将原来的:
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<td class="ms-vb" width="1%" nowrap="nowrap">
<xsl:call-template name="dvt_1.automode">
<xsl:with-param name="KeyField">ID</xsl:with-param>
<xsl:with-param name="KeyValue" select="ddwrt:EscapeDelims(string(@ID))" />
<xsl:with-param name="Mode">edit</xsl:with-param>
</xsl:call-template> </td>
</xsl:if>
<td class="ms-vb">
<SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="Edit" FieldName="Title" ItemId="{@ID}" __designer:bind="{ddwrt:DataBind('u',concat('ff1',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Title')}" />
<SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="Title" ControlMode="Edit" />
</td> <td class="ms-vb">
<xsl:value-of select="@Editor" disable-output-escaping="yes" />
</td>
<td class="ms-vb">
<xsl:value-of select="ddwrt:FormatDate(string(@Modified),2052, 5)" />
</td>
...改为...
<td class="ms-vb">
<SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="Edit" FieldName="Title" ItemId="{@ID}" __designer:bind="{ddwrt:DataBind('u',concat('ff1',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Title')}" />
<SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="Title" ControlMode="Edit" />
</td> <td class="ms-vb">
<xsl:value-of select="@Editor" disable-output-escaping="yes" />
</td>
<td class="ms-vb">
<xsl:value-of select="ddwrt:FormatDate(string(@Modified),2052, 5)" />
</td>
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<td class="ms-vb" width="1%" nowrap="nowrap">
<xsl:call-template name="dvt_1.automode">
<xsl:with-param name="KeyField">ID</xsl:with-param>
<xsl:with-param name="KeyValue" select="ddwrt:EscapeDelims(string(@ID))" />
<xsl:with-param name="Mode">edit</xsl:with-param>
</xsl:call-template> </td>
</xsl:if>
也是将xsl:if从顶部移到底部,这里的每个栏也都是在同一<tr>里的 <td>块。
现在所有的修改我们都是在代码窗格里做的,当单击设计窗格时 ,数据视图又会恢复到默认值模板,因此我们必须切换回编辑模板 (正如我们在上面操作的一样),这样才能看到修改后的外观。
设计视图中的保存/取消块移到了右侧
至此,我们实现了将DVWP中的操作链接编辑/删除移动到右侧 。 最终的页面布局看起来如下图所示:
默认值模板
编辑模板
在下一次的扩展DVWP系列中,我们会在插入模板中完成同样的目标。
转载:SharePoint:扩展DVWP - 第1部分:布局增强 – 在默认值模板和编辑模板中重新排列栏的更多相关文章
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- [转载]Js小技巧||给input type=“password”的输入框赋默认值
http://www.cnblogs.com/Raywang80s/archive/2012/12/06/2804459.html [转载]Js小技巧||给input type="passw ...
- 【FBA】SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用
//http://www.cnblogs.com/OceanEyes/p/custom-provider-in-sharepoint-2013-fba-authentication.html 由于项目 ...
- [FBA]SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用
//http://tech.ddvip.com/2014-05/1401197453210723.html 由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取 ...
- es6中参数【默认值,扩展运算符】
参数默认值 1.普通参数 function info(age,name="grace"){ console.log(name); } info(); //输入:grace 2.对象 ...
- 『转载』hadoop2.x常用端口、定义方法及默认端口
『转载』hadoop2.x常用端口.定义方法及默认端口 1.问题导读 DataNode的http服务的端口.ipc服务的端口分别是哪个? NameNode的http服务的端口.ipc服务的端口分别是哪 ...
- SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用
由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取,而不是从Domain中获取,所以需要对SharePoint Application的身份验证(Claims ...
- CSS3 网格布局(grid-layout)基础知识 - 网格模板属性(grid-template)使用说明
CSS3引入了新的网格布局(grid layout),以适应显示和设计技术的发展(尤其是移动设备优先的响应式设计). 主要目标是建立一个稳定可预料且语义正确的网页布局模式,用来替代过往表现不稳定且繁琐 ...
- 【转载】C#通过IndexOf方法判断某个字符串是否包含在另一个字符串中
C#开发过程中针对字符串String类型的操作是常见操作,有时候需要判断某个字符串是否包含在另一个字符串,此时可以使用IndexOf方法以及Contain方法来实现此功能,Contain方法返回Tru ...
随机推荐
- Windows 10安装IntelliJ IDEA时快捷键冲突设置
Windows的快捷键的非常多,而且个性化软件获得这些权限的也很多,所以没有最终的方法,只能不断的发现和尝试. 下面是收集的一些教程,或许能在这里找到灵感: 切记:不建议优先修改IDEA的快捷键,应该 ...
- java并发编程阻塞队列
在前面我们接触的队列都是非阻塞队列,比如PriorityQueue.LinkedList(LinkedList是双向链表,它实现了Dequeue接口). 使用非阻塞队列的时候有一个很大问题就是:它不会 ...
- 正則表達式--js使用案例
前言:在前端页面使用中.遇到日期格式的验证.開始使用了一款表单控件验证.可是不兼容!!并且使用起来还受到非常大约束.所以就决定自己写原生js. 为了完毕日期格式的验证.第一步,当然是学会使用正則表達式 ...
- react 实现pure render的时候,bind(this)隐患
react 实现pure render的时候,bind(this)隐患 export default class Parent extends Component { ... render() { c ...
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- sql select(A.B)拼接
需要做的工作:把DBtable里边的某两个字段,(当然可以更多)或者不同表,道理类似,用某个符号拼接起来. 比如(Table.A).(Tables.B) oracle里边可以这样写,sql没试: se ...
- FastDFS的配置、部署与API使用解读(4)FastDFS配置详解之Client配置(转)
一种方式是通过调用ClientGlobal类的初始化方法对配置文件进行加载,另一种是通过调用API逐一设置配置参数.后一种方式对于使用Zookeeper等加载属性的方式很方便. 1. 加载配置文件: ...
- npm 的常用操作
cd 项目目录 npm install -y 初始化信息,-y表示所有的选择都表示确定 执行完之后会自动生成一个package.json文件 添加依赖: npm -i(install) jquery ...
- [网页游戏开发]Morn组件赋值
在讲解List之前,我们先介绍一下Morn组件赋值功能 默认属性赋值 界面逻辑开发过程中,经常会涉及到动态更改UI属性,比如: 界面有一个按钮,一个多选框和一个文本,分别命名为myButton,myC ...
- cocos2d-x(vs2012)环境搭建(第一篇)[版本号:cocos2d-x-3.1.1]
1.下载资源 下载cocos2d-x包V3.1.1,下载戳这里: http://www.cocos2d-x.org/download vs2012下载戳这里: http://www.xiazaiba. ...