首先要感谢http://www.cnblogs.com/ceci/archive/2009/12/02/1615592.html,我的其中一个例子是从他这里引用了代码。
首先看一下效果:
列表项数据过滤:
列表项数据搜索:
首先介绍一下列表项的过滤WebPart:
利用的是SharePoint列表的URL Query String来过滤,
如AllItems.aspx?FilterField1=EmpID&FilterValue1=2002&FilterField2=StartDate&FilterValue2=2009-11-13,这个就是产生结果的URL。
可以参考:http://office.microsoft.com/en-us/sharepointserver/HA102509991033.aspx
数据项的筛选WebPart:
直接修改当前页面的listViewWebPart.ListViewXml来实现。
代码参考:
列表项的过滤主要是拼凑查询字符串:
void btnSearch_Click(object sender, EventArgs e)
{
string strSrc = "FilterField{0}={1}&FilterValue{0}={2}&";
StringBuilder sb = new StringBuilder();
sb.Append("?");
int i = 1;
foreach (GridViewRow gvr in gvwFields.Rows)
{
if (!string.IsNullOrEmpty(tbValues.Text))
{
sb.Append(string.Format(strSrc, i, ddlfields.SelectedValue, tbValues.Text));
i++;
}
else
{
break;
}
}
Page.Response.Redirect(Page.Request.Url.LocalPath + sb.ToString());
}
列表搜索的WebPart:
private string BuildCaml(string relation, string fieldName, string value,string fieldType)
{
SPList list = SPContext.Current.List;
string fieldInnerName = list.Fields[fieldName].InternalName;
string caml = "<{0}><FieldRef Name='{1}'/><Value Type='{3}'>{2}</Value></{0}>";
if (relation == "等于")
{
caml = string.Format(caml, "Eq", fieldInnerName, value,fieldType);
}
else if (relation == "包含于")
{
caml = string.Format(caml, "Contains", fieldInnerName, value, fieldType);
}
else if (relation == "不等于")
{
caml = string.Format(caml, "Neq", fieldInnerName, value, fieldType);
}
else if ((relation == "早于") || (relation == "小于"))
{
caml = string.Format(caml, "Lt", fieldInnerName, value, fieldType);
}
else if ((relation == "晚于") || (relation == "大于"))
{
caml = string.Format(caml, "Gt", fieldInnerName, value, fieldType);
}
return caml;
}
部署:
wsp部署后,sharepoint的默认列表webpart上面添加 这个webpart。他根据当前列表项的视图字段进行筛选。别忘了要部署jquery文件。
缺点:
1.每次查询之后,搜索栏的数据会消失。
2. 列表的“所有项目”视图好像不管用。
3.。。。。