qinling072 发表于 2015-9-26 08:51:37

SharePoint 2007中 利用ListViewWebpart 和DataViewWebpart 跨站点 调用列表或者文档库

1. 使用DataViewWebpart
这个网上已经有人写的比较详细了,直接摘录过来,原文地址【http://blog.iyunv.com/RainyLin/archive/2007/12/29/2003092.aspx】
具体内容如下
Microsoft Office SharePoint Server(MOSS)只能在Web部件页中插入当前站点的列表或文档库


那么我们如何才能显示其它站点的列表或文档库呢?下面我们就用SharePoint Designer来实现这个功能。
首先我们创建一个示例站点A


同样我们再创建一个站点B,然后用SharePoint Designer 2007 打开站点B


打开网站后,我们双击Default.aspx,打开后切换到设计视图。然后我们先中“任务窗格”菜单中的“数据源库”


选中后我们在任务面板中可就可以看到如下图所示窗体,我们从下图中可以看出,SharePoint Designer默认只是列出了当前站点(SiteB)的所有列表和文档库等,如果我们要显示本站点的列表或文档库的话,只要直接将列表拖到相应的部件区域就可以了。


但是我们这里是要显示其它站点的列表,要如何办呢?在SharePoint Designer“数据源库”面板下面(见上图红色圈位置),有两个链接,其中一个就是“连接到其他库”,从这里我们就可以把其它站点连接进来。



确定关闭以上窗口,我们就可以看到“数据源库”中出现了我们的站点A


我们将站点A中的“通知”列表拖在界面的部件区域,显示如下


唉,怎么修改者是这么乱七八糟的东东呀,别急,左键点击修改者数据,我们会看到一个“>”的框,点击它我们就可以修改这个数据域的类型了,如下图,我们把它改成“RTF”,问题解决。


添加其它站点的列表显示成功,最终效果如图:


可能有人会问我们加入的通知标题是没有链接的,以及显示界面问题,这些我们都可以用SharePoint Designer进行修改,这里我就不在多说了。


2. 使用ListViewWebpart跨站点调用列表
首先,我们知道ListViewWebpart可以显示当前站点内容列表内容,但是如果想使用它在A站点显示B站点的列表内容,最开始我是直接在Designer中把ListViewWebpart的代码拷贝到B站点中,在Designer中将看到错误:


究其原因,通过反编译可以看到ListViewWebpart有一个WebId的属性,而默认的它的值是SPContext.Current.Web.ID,因此跨站调用的时候,肯定找不到列表

因此,我们可以封装一下ListViewWebpart,写一个简单的Webpart,就可以轻松的跨站点调用列表,然后上传到站点就可以使用了,示例代码如下:

using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;

//UniqueStudio.Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5
namespace UniqueStudio.Test
{
   
    public class MyListViewWebPart : Microsoft.SharePoint.WebPartPages.WebPart, IDisposable
    {
      private ListViewWebPart internalListViewWebPart = null;

      SPSite site = null;
      SPWeb web = null;
      SPList list = null;

      public MyListViewWebPart()
      {
            this.ExportMode = WebPartExportMode.All;
            

            site = new SPSite("http://test-1:10001");

            web = site.AllWebs["BlackSite2"];
            list = web.Lists["页面"];

            
      }

      protected override void Render(HtmlTextWriter writer)
      {
            // TODO: add custom rendering code here.
            // writer.Write("Output HTML");
            //this.internalListViewWebPart.RenderControl(writer);
            EnsureChildControls();
            base.Render(writer);
         
      }


      protected override void CreateChildControls()
      {
            this.internalListViewWebPart = new ListViewWebPart();

            //wp = new ListViewWebPart();

            //wp.ListName = SPContext.Current.Web.Lists["MyList"].ID.ToString("B").ToUpper();

            //wp.ViewGuid = SPContext.Current.Web.Lists["MyList"].DefaultView.ID.ToString("B").ToUpper();

            //wp.ViewType = ViewType.Html;

            //Controls.Add(wp);

            //base.CreateChildControls();

            this.internalListViewWebPart.WebId = web.ID;
            
            this.internalListViewWebPart.ListName = web.Lists["页面"].ID.ToString("B").ToUpper();
            this.internalListViewWebPart.ViewGuid = web.Lists["页面"].DefaultView.ID.ToString("B").ToUpper();
            this.internalListViewWebPart.ViewType = ViewType.Html;

            this.internalListViewWebPart.GetDesignTimeHtml();

            Controls.Add(this.internalListViewWebPart);
            base.CreateChildControls();
      }

      public override void Dispose()
      {
            if (site != null)
            {
                site.Close();
                site = null;
            }
            if (web != null)
            {
                web.Close();
                web = null;
            }
            base.Dispose();
      }
    }
}

不知道怎么上传文件,只好把代码贴上来了,最后的效果如下:

通过比较地址栏和状态的比较可以但到,我在站点http://test-1:10001/调用了http://test-1:10001/BlackSite2/子站点中的页面列表
至此,两种方法都讲完了,可以看到第二种方法是有明显的优势的,它把Toolbar也可以显示出来
页: [1]
查看完整版本: SharePoint 2007中 利用ListViewWebpart 和DataViewWebpart 跨站点 调用列表或者文档库