在我们用新的东西替换掉旧的东西前,最好要有一个备份。这不是一种怀旧情结,而是因为有可能会改坏,当你需要回到修改前的状态时,有了之前保存好的备份就会很方便了。
修改了什么?
通过比较当页面加载时的数据和当保存按钮被点击时的数据,我们可以得到被用户修改的信息,然后据此信息做一些我们希望做的事情。在上一篇中,我们学习了有关asp:label控件的使用,虽然标签在表单里是不可编辑的,但却可以使该表单域在表单操作工作流中变得可用。
我们可以从我们的各种数据源中添加任意的栏到表单中,只需用同样的方法将其加成一个标签即可。
在SharePoint Designer(SPD)里:
1、切换到编辑模板
2、在你希望存放该标签的单元格(随便一行)中点击(要确保没有选中该单元格中已经有的表单域,否则该域会被替换。实在没法不选中已有域时,可以在拆分视图中找到该域对应的高亮代码块,然后将光标移到所在TD代码块结束标记前。)
点击单元格(不要放在数据上)。我们将在这个位置添加标签
3、从“数据源详细信息”面板中选择我们需要插入的栏
4、点击“将选择的域插入为...”并选择“带格式的...”->“标签”
5、可以看到设计视图和代码视图中都发生了变化:
6、现在,我们需要将它隐藏掉,通过以下修改...
从:
<td class="ms-vb"> <SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="Edit" FieldName="Title" ... /> <SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="Title" ControlMode="Edit" /> <asp:Label runat="server" id="ff4{$Pos}" text="{@_x804c__x4f4d__x7f16__x53f7_}"... /> </td>
改成:
<td class="ms-vb"> <SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="Edit" FieldName="Title" ... /> <SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="Title" ControlMode="Edit" /> <span style="display:none"> <asp:Label runat="server" id="ff4{$Pos}" text="{@_x804c__x4f4d__x7f16__x53f7_}" ... /> </span> </td>
此时的屏幕状态
该标签现在被隐藏起来,但是仍然绑定到数据源,所以在页面加载时还是会显示当前数据。用户没有办法修改它。
隐藏的标签提供了一个在页面加载时数据的快照
为每一个你需要记录修改前状态的栏重复相同的过程。从易于维护角度考虑,将每一个隐藏的标签放在和相应的表单域相同的单元格里对于你将来定位会很有帮助。但是,由于它们都是隐藏的,你也可以将它们一起放在一个span标记里。
下一次:你一直想知道如何使用PreSaveAction()吗?我之前说过还会回到这个话题的。在接下来的扩展DVWP系列中,我们将实际做一些有用的东西出来。
参考资料
SharePoint: Extending the DVWP – Part 12: Adding More Form Fields from the Data