我需要使用默认的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。
答案 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
答案 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));
}
}