2011-03-07 129 views
3

我需要消耗由默認的SharePoint過濾的WebPart傳遞的值。我看不出自定義SharePoint站點如何建立連接並獲取數據。這甚至有可能嗎?可以在SharePoint Web部件連接到自定義SharePoint的WebPart

更新

提供者的WebPart是一個默認的SharePoint列表過濾器的WebPart。 消費者WebPart是一個自定義WebPart

這是我想出的代碼,但「連接」選項仍在灰色的SharePoint頁面上。在頁面上,我有一個SharePoint列表篩選器WebPart和我的CustomPageViewer WebPart。

namespace PageViewerWithConnections.CustomPageViewer 
{ 
    [ToolboxItemAttribute(false)] 
    public class CustomPageViewer : System.Web.UI.WebControls.WebParts.WebPart 
    { 
     IFilterValues _filterVals; 

     [ConnectionConsumer("Consumer connection", "Consumer param")] 
     public void ConsumeFilter(IFilterValues filterValues) 
     { 
      _filterVals = filterValues; 
     } 

     Microsoft.SharePoint.WebPartPages.PageViewerWebPart objPageViewer; 
     protected override void CreateChildControls() 
     { 

     } 
    } 
} 

原因是這個方法 我的目標是不同的URL設置爲基於我從SharePoint列表篩選器Web部件獲取值的頁面查看器Web部件。看起來SharePoint列表篩選器WebPart不能將數據發送到頁面查看器WebPart。

+0

是消費者的WebPart一個SharePoint 2010 「視覺的WebPart」? – dotnetengineer 2012-03-30 20:05:31

回答

3

您需要在自定義Web部件上創建一個使用方法,該方法將IFilterValues的實例作爲參數並使用ConnectionConsumerAttribute屬性。

private IFilterValues _filterVals; 

[ConnectionConsumer("Filter Consumer", "FilterConsumer")] 
public void ConsumeFilter(IFilterValues filterValues) 
{ 
    _filterVals = filterValues; 
} 

注意,過濾器值的消費在頁面生命週期的OnPreRender階段發生,所以你需要重寫OnRender方法作用於從連接消耗的任何值,或包括邏輯在消費者的方法。

欲瞭解更多信息,請查看以下鏈接:

http://msdn.microsoft.com/en-us/library/ms494838(v=office.12).aspx

http://msdn.microsoft.com/en-us/library/ms469765.aspx

+0

嗨凱爾,我更新了一些代碼的問題,但WebPart上的「連接」屬性仍然灰顯。 – iJK 2011-03-07 22:36:22

+0

你在使用哪個列表篩選web部件?這是一個開箱即用的Web部件,還是您安裝的東西? – 2011-03-07 22:49:02

+0

我相信這是開箱即用的Web部件。 – iJK 2011-03-07 23:17:55

1

在你應該叫base.CreateChildControls的的CreateChildControls();

下面是一些工作代碼:


    List<IFilterValues> providers = new List<IFilterValues>();

protected override void CreateChildControls() { if (providers.Count > 0 && providers[0].ParameterValues != null) { this.FilterValue1 = providers[0].ParameterValues[0]; } base.CreateChildControls(); } [ConnectionConsumer("Provider WebPart", "IFilterValues", AllowsMultipleConnections = false)] public void SetConnectionInterface(IFilterValues provider) { if (provider != null) { this.providers.Add(provider); List<ConsumerParameter> parameters = new List<ConsumerParameter>(); parameters.Add(new ConsumerParameter("param1", ConsumerParameterCapabilities.SupportsSingleValue | ConsumerParameterCapabilities.SupportsEmptyValue | ConsumerParameterCapabilities.SupportsAllValue)); provider.SetConsumerParameters(new ReadOnlyCollection<ConsumerParameter>(parameters)); } }
相關問題