场景:我需要根据选定的过滤器刷新/过滤在同一页面上的列表视图 Web 部件中显示的项目/记录。所以我创建了 Visual Web Part 并尝试以编程方式修改 List View Web Part 的视图。到目前为止,我已经到达这里:
string spListName = "Job";
protected void BtnSearchClick(object sender, EventArgs e)
{
try
{
SPWeb oWebsite = SPContext.Current.Web;
SPList oList = oWebsite.Lists[spListName];
XsltListViewWebPart xsltWP = null;
SPWebPartManager wpManager = WebPartManager.GetCurrentWebPartManager(Page) as SPWebPartManager;
//Code to Find List View Web Part on Page
foreach (System.Web.UI.WebControls.WebParts.WebPart wp in wpManager.WebParts)
{
if (wp.GetType().Name == "XsltListViewWebPart")
xsltWP = wp as XsltListViewWebPart;
}
oWebsite.AllowUnsafeUpdates = true;
StringBuilder strbPreQuery = new StringBuilder("<Where><Eq>");
StringBuilder strbPostQuery = new StringBuilder("</Value></Eq></Where>");
string strQueryKeyword = "<FieldRef Name='Customer' /><Value Type='Lookup'>";
SPQuery oQuery = new SPQuery();
oQuery.Query = strbPreQuery.ToString() + strQueryKeyword + txtCustomer.Text + strbPostQuery.ToString();
SPListItemCollection itemCol = oWebsite.Lists[spListName].GetItems(oQuery);
PropertyInfo pi = xsltWP.GetType().GetProperty("ContextView", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
SPView view = (SPView)(pi.GetValue(xsltWP, null));
view.Query = oQuery.Query;
view.Update();
wpManager.SaveChanges(xsltWP);
xsltWP.DataBind();
oWebsite.AllowUnsafeUpdates = false;
}
catch (Exception ex)
{
Response.Write(ex);
}
}
上面的代码有效,但现在我面临以下问题:
结果更新需要刷新页面,因此如果我添加以下代码,结果会更新,但可视 Web 部件中的过滤器值会丢失。
this.Context.Response.Redirect(this.Context.Request.Url.ToString());
一个用户应用的过滤也反映给另一个用户。
有人可以帮助解决我遇到的这两个问题吗?那就是我想要的
- 保留要同时修改的过滤器值和结果
- 过滤应该只针对一个用户,而不是针对所有用户。
在这方面的任何帮助将不胜感激。