题
我在一个网站上有一份公告列表。我想将其作为 Web 部件添加到每个子网站的顶部。我怎样才能在 MOSS 中做到这一点?
其他提示
在本例中,我使用了数据视图 Web 部件。创建 Web 服务数据源以从其他站点的列表中获取数据。
很像这样:
有几点。
首先,您指定使用的是 WSS 3.0,因此 CQWP 不可用(您需要 MOSS 并打开发布才能使其可用)。增强社区版也不适合您,因为它源自 CQWP。
其次,我同意 Eugene Katz 的观点,即 DataFormWebPart 将是一种简单的方法,并且我的生成方法与他发布的链接略有不同。在 Sharepoint Designer 中,打开要放置 Web 部件的所需网站。从任务窗格菜单中选择数据源库,然后单击窗格底部的“连接到另一个库...”,然后浏览/选择包含公告列表的父站点。现在,您只需从“数据源库”窗格上新创建的节点将公告添加为 DataFormWebPart,就像在您的网站上一样。如果您不熟悉,Sharepoint Designer 帮助将显示如何执行此操作。
根据您的喜好设置 DataFormWebPart 后,您可以通过执行以下操作更轻松地将其添加到其他站点:突出显示新构建的 DataFormWebPart,然后选择“文件/导出/将 Web 部件保存到.../站点库”。现在,它可以作为可添加的 Web 部件在整个网站集中提供。
您应该使用 SharePoint 对象模型获取该特定列表的 SPList 对象。一旦获得相同的结果,您就可以使用 RenderAsHtml() 方法渲染列表。请注意,RenderAsHtml() 方法采用 SPQuery 对象作为参数。您需要使用适当的查询字符串创建一个 SPQuery 对象。此代码可以覆盖自定义 Web 部件的 RenderWebPart() 方法:
SPSite 站点 = new SPSite(siteURL);
SPWeb web = site.OpenWeb(webName);
SPList 列表 = web.Lists[listName];
SPQuery 查询 = new SPQuery();
查询.查询 = 查询字符串;
字符串 html = list.RenderAsHtml(query);
输出.Write(html);//输出是RenderWebPart方法中的HtmlTextWriter对象。
Codeplex 上的 Content By Type Web 部件非常适合执行此操作。它还支持显示任何子网站中任何列表中给定内容类型的项目。
内容查询 Web 部件或开源增强型内容查询 Web 部件是实现此目的的好方法。如果您没有 MOSS 而只有 WSS,先生。卡茨和先生。阿什温的答案是可以接受的,但回答这个问题的方式不同。