关于DataFormWebPart中CreatedModifiedInfo信息的分开使用

以下是问题的描述,我先从数据说起.
数据存储在一个叫pages的自定义列表中,该列表除默认的栏外,另增加了一栏"Abstract",为多行文本,用于存储文章摘要信息.当该列表中录入数据后如图:


这时,当我们点列表项如"page2"时,会进入该项的 DispForm.aspx页面.如图:

这个页面不符合客户对页面整体风格和布局的要求.最终客户要的这个显示数据的页面效果如下:

因此我们需要对这个页面进行修改.在SharePoint Desinger中,我们做了如下操作:

1.选中原先的ListFormWebPart,并将其所在 WebPartZone的Visible="false",将其藏起来.

2.然后在上方增加一行,插入一个自定义列表表单(插入->SharePoint控件->自定义列表表单),如图:

3.插入后,页面变为:

4.我们可以修改这个DataFormWebPart,或着这个表格,使其符合界面展示的要求.
对于Title和Abstract部分,我们是可以灵活定制的.如图:

但是,当做到创建者和创建时间时,我们发现在这里Created, Created By,Modified,Modified By四个内容是合在一个叫CreatedModifiedInfo的控件中的.无法单独拿出一个来做展示.注意到当前数据源中也没有这些字段来供我们拖放.如图:

我们该如何做,才能让创建时间或创建者按客户预想的效果展示?
解决办法要从这里寻找:
D:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES\DefaultTemplates.ascx
打开该文件,查找关键词“CreatedModifiedInfo”,找到如下的内容:

<SharePoint:RenderingTemplate ID="CreatedModifiedInfo" runat="server">
    
<Template>
        
<table cellpadding=0 cellspacing=0>
          
<tr><td nowrap class="ms-descriptiontext" ID=onetidinfoblock1>
                
<SharePoint:FormattedString FormatText="<%$Resources:wss,form_createdby%>" runat="server">
                    
<SharePoint:FormField ControlMode="Display" FieldName="Created" DisableInputFieldLabel="true" runat="server"/>
                    
<SharePoint:FormField ControlMode="Display" FieldName="Author" DisableInputFieldLabel="true" runat="server"/>
                    
<SharePoint:CreationType runat="server"/>
                
</SharePoint:FormattedString>
            
</td></tr>
            
<tr><td nowrap class="ms-descriptiontext" ID=onetidinfoblock2>
                
<SharePoint:FormattedString FormatText="<%$Resources:wss,form_modifiedby%>" runat="server">
                    
<SharePoint:FormField ControlMode="Display" FieldName="Modified" DisableInputFieldLabel="true" runat="server"/>
                    
<SharePoint:FormField ControlMode="Display" FieldName="Editor" DisableInputFieldLabel="true" runat="server"/>
                
</SharePoint:FormattedString>
            
</td></tr>
        
</table>
    
</Template>
</SharePoint:RenderingTemplate>
看到这里,我想大家已经知道该怎么办了。
在SharePoint Desinger中,重新定义该控件的模板。
比如,像这样:
<SharePoint:CreatedModifiedInfo ControlMode="Display" runat="server">
        
<CustomTemplate>
            
<table cellpadding="0" cellspacing="0" border="0">
            
<tr>
            
<td>创建时间:&nbsp;</td>
            
<td><SharePoint:FieldValue FieldName="Created" runat="server" ControlMode="Display" DisableInputFieldLabel="true"/></td>
            
</tr>
            
</table>
        
</CustomTemplate>
    
</SharePoint:CreatedModifiedInfo>
最终效果如下

FieldValue这个控件真是好用啊。其他几个,都可以这么来显示。只要修改FieldName即可。
posted @ 2007-05-22 18:20 Sunmoonfire 阅读(4178) 评论(18)  编辑 收藏 网摘 所属分类: SharePoint

  回复  引用  查看    
#1楼2007-05-22 19:20 | 努力学习的熊      
大牛!大牛!
  回复  引用    
#2楼2007-05-22 23:31 | 热门单曲[未注册用户]
大牛!大牛! 支持楼主
  回复  引用    
#3楼2007-05-23 14:19 | choral[未注册用户]
如果改掉那个ControlTemplate的话,所有其他的页面也都会跟着变啊~
  回复  引用  查看    
#4楼[楼主]2007-05-23 17:58 | Sunmoonfire      
@choral
上面的例子不是要改DefaultTemplates.ascx中的那个,是在SD中改当前DispForm.aspx中的那个。可以点击最后一张图片放大,这样更方便理解我的意思。

  回复  引用    
#5楼2007-05-24 12:18 | b1455[未注册用户]
不赞成修改DefaultTemplates。在多个sharepoint web application同存一个server的情况下。会影响其他。可以有其他办法。
  回复  引用  查看    
#6楼[楼主]2007-05-24 14:45 | Sunmoonfire      
@b1455
本例是修改该列表的dispform.aspx,使用自己的模板。不会影响到其它列表或站点。

  回复  引用    
#7楼2007-05-24 16:12 | cnodin[未注册用户]
为什么我用SharepointDesigner打开本机的一个站点,SharepointDesigner占内存基本上都要到5、6百M。
  回复  引用    
#8楼2007-05-25 06:29 | b1455[未注册用户]
有几点

1:D:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES\DefaultTemplates.ascx 是全局设定,这次修改虽然无关痛痒,但是此门一开,其他的web application照此办理,相互影响不可避免。
web server extensions\12之下的文件,根据MS在v1,v2的表现,被色弱vicepack复盖的可能性不小,届时又要再来修改。
2:dispform.aspx一经修改,会生成一个拷贝,site的设定应该无法再影响,会有后遗症。

  回复  引用  查看    
#9楼[楼主]2007-05-27 21:07 | Sunmoonfire      
@b1455
1、全局设定会影响其他的网站集,而且可能会因为Update而被覆盖,因此不建议大家改动。
2、DataFormWebPart实际上是一个XmlWebPart。它的设置包括数据源,显示字段等等都是以硬编码的方式写在WebPart属性中的。所以一但使用该部件显示列表数据,就会存在一个问题。就是一但作为数据源的列表发生了某些特定改动,如删除了某个栏,而该栏之前显示在DataFormWebPart中这类情况,都需要重新修改DataFormWebPart。
3、修改dispform.aspx后会生成一个破坏了Page Ghost的拷贝。好在这个生成的拷贝可以随着我们另存为列表模板而保存下来。这对于一些已经设计好成熟结构的列表还是有一定用处的。如果列表经常要改,而你发现这些改动没有应用到我们设计过的DataFormWebPart上,建议还是不要这么用。毕竟修改xslt不是很容易的事情,即使可以借助部分SharePoint Designer的可视化功能。

  回复  引用    
#10楼2007-07-27 17:33 | test[未注册用户]
我要显示附件什么显示啊
  回复  引用  查看    
#11楼[楼主]2007-07-27 19:10 | Sunmoonfire      
@test
这个问题很好。我刚刚实验了一下,附件字段的显示也是很特殊的。而且情况与创建时间类字段还不同。对于附件字段,应该使用下面的标签来添加:
1、字段的显示名称
<SharePoint:FieldLabel FieldName="Attachments" runat="server"/>
2、字段值
<SharePoint:AttachmentsField FieldName="Attachments" runat="server"/>

显示成功后,如果想要在没有附件时不显示附件字段名称,还需要再多加一点客户端脚本,判断如果为空时将这一块内容的style.display设为none。

  回复  引用    
#12楼2007-08-01 15:31 | test[未注册用户]
我现在用数据视图,也就是说没有列表表单,没办法自定义列表表单,这个要什么显示
  回复  引用  查看    
#13楼[楼主]2007-08-06 14:34 | Sunmoonfire      
@test
如果用数据视图的话,展现部分通过修改相应的xslt来定制。特殊的部分如上面的创建时间,附件等建议与数据视图定义的内容分开。

  回复  引用    
#14楼2007-10-09 00:28 | ST[未注册用户]
请问如何在DataFormWebPart里使用附件?我尝试使用SharePoint:AttachmentUpload,但是此控件不能Render,SharePoint Designer显示An Unhandled Exception。 在浏览器里,错误信息是这样的:An error occurred during the processing of /testsite/Lists/requests/NewForm2.aspx. Type 'Microsoft.SharePoint.WebControls.AttachmentUpload' does not have a public property named 'xmlns:SharePoint'.

非常感谢您的帮助。我是一个初学者,如果有例子就最好。谢谢!!

  回复  引用    
#15楼2007-10-15 12:44 | tracywang[未注册用户]
我建了一个可以新建文件夹的列表,然后我自定义了列表的NewForm.asp,但是出现了这样的问题,在新建记录时不能添加附件,而且每次记录都是保存在了同一个目录下(列表的第一级目录下),比方说我在列表的某个文件夹下建记录时它并没有保存在当前目录下,而是保存到了列表的一级目录下。请问这个问题怎么解决啊?

  回复  引用    
#16楼2008-03-31 14:29 | wufu[未注册用户]
我按上面给的方法显示创建时间,可是显示的时间比实际创建时间晚8个小时。
不知道是什么原因。请楼主帮帮我

  回复  引用  查看    
#17楼[楼主]2008-04-08 10:42 | Sunmoonfire      
@wufu
确实,使用FieldValue显示的日期时间是标准时间。可以改用<SharePoint:FormField FieldName="Created" runat="server"/>

  回复  引用    
#18楼2008-06-06 14:40 | lickies-[未注册用户]
综上所述

还是很不方便,呵呵




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 755968




相关文章:

相关链接: