Jianchidaodi
面朝大海,春暖花开
1. 使用DataViewWebpart
这个网上已经有人写的比较详细了,直接摘录过来,原文地址【http://blog.csdn.net/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
{
    [Guid(
"76bded68-1cbf-4ad4-84cc-7610ce8eaa5b")]
    
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也可以显示出来
posted on 2008-01-16 12:38  Jianchidaodi  阅读(2330)  评论(8编辑  收藏  举报