Sharepoint 自定义筛选器 Web 部件
Posted
技术标签:
【中文标题】Sharepoint 自定义筛选器 Web 部件【英文标题】:Sharepoint Custom Filter Web Part 【发布时间】:2010-09-24 20:21:13 【问题描述】:我想创建一个自定义 Web 部件,它具有多个过滤器 Web 部件,并且可以在运行时/设计时连接到报表查看器 Web 部件(集成模式)。
我为此进行了很多搜索,但找不到一种方法来让单个 Web 部件提供多个过滤器。
比如说——
-
我的
Report
接受两个参数Department
和Region
。
我想将两个参数与具有两个下拉菜单的单个 Web 部件连接(一个用于 Department
,一个用于 Region
)
下拉列表中的值应传递给Department
和Region
Report
应该在报表查看器 Web 部件中呈现
目前尝试过的解决方案
-
创建一个添加两个自定义下拉列表的 Web 部件
从
ITransformableFilterValues
实现的自定义下拉类
在 web pat 上有 2 个方法,每个方法都有 ConnectionProvider
属性并返回下拉控件的实例
问题:
即使我的自定义过滤器 Web 部件上显示了 2 个连接选项,也只能添加一个。
例如,如果我将 Filter1
(自定义 Web 部件)连接到 Department
,那么我将无法再次将其连接到 Report Viewer
Web 部件。
我的 Web 部件有这样的方法:
[ConnectionProvider("Departmet", "UniqueIDForDept", AllowsMultipleConnections = true)]
public ITransformableFilterValues ReturnCity()
return dropDownDepartment; // It implemets ITransformableFilterValues
[ConnectionProvider("Region", "UniqueIDForRegion", AllowsMultipleConnections = true)]
public ITransformableFilterValues ReturnMyRegionB()
return dropDownRegion; //It implemets ITransformableFilterValues
【问题讨论】:
这其实是ASP中的继承问题。 http://forums.asp.net/p/1118366/2646773.aspx 【参考方案1】:我做了类似的事情。这可能有助于为您指明正确的方向。我使用表单库中的数据来创建详细报告。我使用报告服务并使用 Web 服务连接到共享点。 http://server/_vti_bin/Lists.asmx。我使用的报告参数是项目 ID 或 GUID。然后我配置了我的报告查看器。在表单库中,我使用 javascript 覆盖上下文菜单以添加“查看报告”。在报告页面上,我使用查询字符串过滤器从 url 中获取项目 ID。
【讨论】:
【参考方案2】:不确定您是否能够解决您的问题..
其实我试过AllowsMultipleConnections = true
,效果很好:
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using aspnetwebparts = System.Web.UI.WebControls.WebParts;
using Microsoft.Office.Server.Utilities;
using wsswebparts = Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Portal.WebControls;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using Microsoft.SharePoint.Utilities;
namespace FromMultiSource
[Guid("a0d068dd-9475-4055-a219-88513e173502")]
public class MultiSource : aspnetwebparts.WebPart
List<wsswebparts.IFilterValues> providers = new List<wsswebparts.IFilterValues>();
public MultiSource()
[aspnetwebparts.ConnectionConsumer("Multiple Source Consumer", "IFilterValues", AllowsMultipleConnections = true)]
public void SetConnectionInterface(wsswebparts.IFilterValues provider)
this.providers.Add(provider);
if (provider != null)
List<wsswebparts.ConsumerParameter> l = new List<wsswebparts.ConsumerParameter>();
l.Add (new wsswebparts.ConsumerParameter ("Value", wsswebparts.ConsumerParameterCapabilities.SupportsMultipleValues | Microsoft.SharePoint.WebPartPages.ConsumerParameterCapabilities.SupportsAllValue));
provider.SetConsumerParameters(new ReadOnlyCollection<wsswebparts.ConsumerParameter>(l));
protected override void CreateChildControls()
base.CreateChildControls();
// TODO: add custom rendering code here.
// Label label = new Label();
// label.Text = "Hello World";
// this.Controls.Add(label);
protected override void RenderContents(htmlTextWriter writer)
base.RenderContents(writer);
this.EnsureChildControls();
foreach (wsswebparts.IFilterValues provider in this.providers)
if (provider != null)
string prop = provider.ParameterName;
ReadOnlyCollection<string> values = provider.ParameterValues;
if (prop != null && values != null)
writer.Write("<div>" + SPEncode.HtmlEncode(prop) + ":</div>");
foreach (string v in values)
if (v == null)
writer.Write("<div> <i>"(empty)"/null</i></div>");
else if (v.Length == 0)
writer.Write("<div> <i>empty string</i></div>");
else
writer.Write("<div> " + v + "</div>");
else
writer.Write("<div>No filter specified (all).</div>");
else
writer.Write("<div>Not connected.</div>");
writer.Write("<hr>");
【讨论】:
以上是关于Sharepoint 自定义筛选器 Web 部件的主要内容,如果未能解决你的问题,请参考以下文章
摘要链接 Web 部件与 SharePoint 2007/2010 中的自定义 Web 部件冲突