I figured out the following simple way to extend the CQWP by having the filtering done with a drop down list on the webpart itself.
At first I wanted to use the consumer/provider method but decided this was easier...
Here's the code:
namespace ExtendCQWP.FilterWP
{
[ToolboxItemAttribute(false)]
public class FilterWP: Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart
{
protected override void OnLoad(EventArgs e)
{
if (this.Page.Request.QueryString["FilterField1"]!=null && this.Page.Request.QueryString["FilterValue1"]!=null)
{
this.FilterField1 = this.Page.Request.QueryString["FilterField1"].ToString();
this.FilterValue1 = this.Page.Request.QueryString["FilterValue1"].ToString();
}
}
protected override void CreateChildControls()
{
DropDownList ddl = new DropDownList();
ddl.Items.Add(new ListItem("All", "All"));
ddl.Items.Add(new ListItem("HR", "HR"));
ddl.Items.Add(new ListItem("Finance", "Finance"));
ddl.Items.Add(new ListItem("IT", "IT"));
ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
ddl.AutoPostBack = true;
ddl.EnableViewState = true;
if (this.Page.Request.QueryString["FilterValue1"] != null)
{
foreach(ListItem item in ddl.Items)
if(item.Text.Equals(this.Page.Request.QueryString["FilterValue1"].ToString()))
{
item.Selected = true;
break;
}
}
this.Controls.Add(ddl);
base.CreateChildControls();
}
void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList tmpddl = (DropDownList)sender;
if(tmpddl.SelectedValue.Equals("All"))
SPUtility.Redirect("http://mysite/SitePages/cq.aspx", SPRedirectFlags.Trusted, HttpContext.Current);
else
SPUtility.Redirect("http://mysite/SitePages/cq.aspx?FilterField1=Division&FilterValue1=" + tmpddl.SelectedValue, SPRedirectFlags.Trusted, HttpContext.Current);
}
}
}
Here's how the list and web part looks like.
No comments:
Post a Comment