自定义筛选器Web部件以筛选/更新ListView Web部件

时间:2015-02-05 14:44:26

标签: sharepoint filter sharepoint-2010 web-parts dataformwebpart

场景:我需要根据选定的过滤器在同一页面上刷新/过滤列表视图Web部件中显示的项目/记录。所以我创建了Visual Web Part并尝试以编程方式修改列表视图Web部件的视图。到目前为止,我到达了这里:

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);
}
}

以上代码有效但现在我遇到以下问题:

  1. 结果更新需要页面刷新,因此如果我添加以下代码,结果会更新,但可视Web部件中的过滤器值会丢失

    this.Context.Response.Redirect(this.Context.Request.Url.ToString());
    
  2. 由一位用户应用的过滤也会反映给其他用户。

  3. 有些人可以帮忙解决我遇到的这两个问题吗?那是我想要的

    1. 要保留过滤器值和要同时修改的结果
    2. 过滤应仅针对一个用户,而不是针对所有用户。
    3. 在这方面的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:-1)

创建一个保存视图默认值的SPQuery。 然后在传递价值后, 使用此选项可以恢复视图的默认查询。

SPView _view;

protected void Page_Unload(object sender, EventArgs e)
{
    //your code
    SPView view = (SPView)(pi.GetValue(xsltWP, null));
    view.Query = _view.Query;
    view.Update();
}