publicclass QueryStringFilter : WebPart, ITransformableFilterValues, IDefaultFilterValue
{
public QueryStringFilter()
{
this.ChromeType = PartChromeType.None;
this.Hidden = true;
this.MultiValueHandling = MultiValueHandling.First;
this.MultiValueSeparator = String.Empty;
}
[WebDisplayName("Default Value")]
[WebPartStorage(Storage.Shared)]
[WebBrowsable(true)]
[FriendlyName("Default Value")]
[DefaultValue("")]
[Description("")]
[Personalizable(PersonalizationScope.Shared)]
public String DefaultValue { get; set; }
[WebDisplayName("Allow All Value")]
[WebPartStorage(Storage.Shared)]
[WebBrowsable(true)]
[FriendlyName("Allow All Value")]
[Personalizable(PersonalizationScope.Shared)]
[DefaultValue(false)]
[Description("")]
public Boolean AllowAllValue { get; set; }
[WebDisplayName("Allow Empty Value")]
[WebPartStorage(Storage.Shared)]
[WebBrowsable(true)]
[FriendlyName("Allow Empty Value")]
[Personalizable(PersonalizationScope.Shared)]
[DefaultValue(false)]
[Description("")]
public Boolean AllowEmptyValue { get; set; }
[WebDisplayName("Allow Multiple Values")]
[WebPartStorage(Storage.Shared)]
[WebBrowsable(true)]
[FriendlyName("Allow Multiple Values")]
[Personalizable(PersonalizationScope.Shared)]
[DefaultValue(false)]
[Description("")]
public Boolean AllowMultipleValues { get; set; }
[WebDisplayName("Query String Parameter Name")]
[WebPartStorage(Storage.Shared)]
[WebBrowsable(true)]
[FriendlyName("Query String Parameter Name")]
[Personalizable(PersonalizationScope.Shared)]
[DefaultValue("")]
[Description("")]
public String ParameterName { get; set; }
[WebDisplayName("Multi Value Handling")]
[WebPartStorage(Storage.Shared)]
[WebBrowsable(true)]
[FriendlyName("Multi Value Handling")]
[Personalizable(PersonalizationScope.Shared)]
[DefaultValue(MultiValueHandling.First)]
[Description("")]
public MultiValueHandling MultiValueHandling { get; set; }
[WebDisplayName("Multi Value Separator")]
[WebPartStorage(Storage.Shared)]
[WebBrowsable(true)]
[FriendlyName("Multi Value Separator")]
[Personalizable(PersonalizationScope.Shared)]
[DefaultValue("")]
[Description("")]
public String MultiValueSeparator { get; set; }
ReadOnlyCollection<String> ITransformableFilterValues.ParameterValues
{
get
{
var list = new List<String>();
if (String.IsNullOrWhiteSpace(this.ParameterName) == false)
{
if (this.AllowMultipleValues == false)
{
list.Add(this.Context.Request.QueryString[this.ParameterName]);
}
else
{
var index =
Array.IndexOf(
this.Context.Request.QueryString.AllKeys.Select(x => (x ?? String.Empty).ToLowerInvariant()).ToArray(),
this.ParameterName.ToLowerInvariant());
if (index >= 0)
{
if (this.MultiValueHandling == MultiValueHandling.First)
{
list.Add(this.Context.Request.QueryString.GetValues(index).First());
}
elseif (this.MultiValueHandling == MultiValueHandling.All)
{
list.AddRange(this.Context.Request.QueryString.GetValues(index));
}
else
{
list.Add(String.Join(this.MultiValueSeparator, this.Context.Request.QueryString.GetValues(index)));
}
}
}
if (list.Count == 0)
{
if (String.IsNullOrWhiteSpace(this.DefaultValue) == false)
{
list.Add(this.DefaultValue);
}
else
{
if (this.AllowAllValue == false)
{
if (this.AllowEmptyValue == true)
{
list.Add(String.Empty);
}
}
else
{
list.Add(null);
}
}
}
}
returnnew ReadOnlyCollection<String>(list);
}
}
[ConnectionProvider("Query String Filter", "ITransformableFilterValues", AllowsMultipleConnections = true)]
public ITransformableFilterValues GetFilterValues()
{
returnthis;
}
}