SharePoint WebPart是否可以连接到自定义SharePoint WebPart

时间:2011-03-07 19:58:51

标签: sharepoint-2010

我需要使用默认的sharepoint过滤器webpart传递的值。我没有看到自定义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()
        {

        }
    }
}

此方法的原因 我的目标是根据从SharePoint列表筛选器Web部件获取的值为页面查看器Web部件设置不同的URL。似乎SharePoint列表筛选器WebPart无法将数据发送到页面查看器WebPart。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

在CreateChildControls中,你应该调用base.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)); } }