2

場景:我需要基於選定的篩選器刷新/篩選列表視圖Web部件中顯示的項目/記錄。所以我創建了Visual Web Part,並嘗試以編程方式修改列表視圖Web部件的視圖。到目前爲止,我已經達到了到這裏:自定義篩選Web部件來篩選/更新ListView 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. 已過濾由一個用戶所施加也反映到另一個用戶。

有些人可以幫忙解決這兩個問題嗎?這是我想

  1. 爲了維護過濾器值和結果的同時
  2. 過濾應該只有一個用戶,而不是所有的修改。

在此方面的任何幫助將不勝感激。

回答

-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(); 
} 
+3

感謝您的回覆,但請問這能解決問題嗎?應用需要頁面刷新的默認視圖的更改。其次它不會解決共享給多個用戶的問題。 – 2015-02-06 08:05:47

+0

使用來防止任何形式的頁面刷新。 Ex '。 的 <的ContentTemplate> <的SharePoint:ListView的RUNAT = 「服務器」 ID = 「ID」/> ' 它將解決共享視圖的問題,因爲我們正在將page_unload上的列表視圖更新爲默認值。 – 2015-02-06 08:26:29

+3

你不明白....視圖更新的效果需要刷新才能顯示更改。 – 2015-02-06 11:27:39

相關問題