【问题标题】:Can a SharePoint WebPart connect to a custom SharePoint WebPartSharePoint WebPart 可以连接到自定义 SharePoint WebPart
【发布时间】:2011-07-10 14:55:20
【问题描述】:

我需要使用默认共享点过滤器 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。

【问题讨论】:

  • 消费者 WebPart 是 SharePoint 2010“Visual WebPart”吗?

标签: sharepoint-2010


【解决方案1】:

您需要在自定义 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

【讨论】:

  • 嗨,Kyle,我用一些代码更新了问题,但 WebPart 上的“连接”属性仍然是灰色的。
  • 您使用的是哪个列表过滤器 Web 部件?这是开箱即用的 Web 部件,还是您安装的东西?
  • 我相信它是开箱即用的 Web 部件。
【解决方案2】:

在 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)); 
        } 
    }

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 2011-06-13
    • 2011-08-23
    • 2011-03-06
    • 2019-04-11
    • 1970-01-01
    • 2011-02-12
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多