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);
}
}
上面的代碼工作,但現在我面臨着以下問題:
結果更新用需要刷新頁面所以如果我添加以下代碼,結果會更新,但可視Web部件中的過濾器值丟失。
this.Context.Response.Redirect(this.Context.Request.Url.ToString());
已過濾由一個用戶所施加也反映到另一個用戶。
有些人可以幫忙解決這兩個問題嗎?這是我想
- 爲了維護過濾器值和結果的同時
- 過濾應該只有一個用戶,而不是所有的修改。
在此方面的任何幫助將不勝感激。
感謝您的回覆,但請問這能解決問題嗎?應用需要頁面刷新的默認視圖的更改。其次它不會解決共享給多個用戶的問題。 – 2015-02-06 08:05:47
使用 來防止任何形式的頁面刷新。 Ex '。 的 <的ContentTemplate> <的SharePoint:ListView的RUNAT = 「服務器」 ID = 「ID」/> 的ContentTemplate> ASP:的UpdatePanel> ' 它將解決共享視圖的問題,因爲我們正在將page_unload上的列表視圖更新爲默認值。 –
2015-02-06 08:26:29
你不明白....視圖更新的效果需要刷新才能顯示更改。 – 2015-02-06 11:27:39