2

시나리오 : 목록보기 웹 파트에 표시된 항목/레코드를 선택한 필터를 기반으로 동일한 페이지에서 새로 고치거나 필터링해야합니다. 그래서 비주얼 웹 파트를 만들고 목록보기 웹 파트의 뷰를 프로그램 적으로 수정하려고했습니다. 지금까지 내가 여기까지 도달 :ListView 웹 파트를 필터링/업데이트하는 사용자 지정 필터 웹 파트

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. 결과 그 갱신 내가 다음 코드를 추가하면 페이지가 너무를 새로 고칠 필요 결과가 업데이트되지만 시각적 웹 파트의 필터 값이 손실됩니다..

    this.Context.Response.Redirect(this.Context.Request.Url.ToString()); 
    
  2. 은 다른 사용자에게 반사되어 하나의 사용자에 의해인가 여과 하였다.

내가 갖고있는이 두 가지 문제를 해결할 수있는 사람이 있습니까? 그게 내가 동시에

  • 필터링은 하나의 사용자가 아닌 모두를 위해해야 ​​수정할 수있는 필터 값과 결과를 유지하려면
    1. 를 원하는 것입니다.

    이 점에 대한 도움이 필요합니다.

  • 답변

    -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

    답장을 보내 주셔서 감사합니다. 그러나 문제가 해결 되나요? 페이지 새로 고침이 필요한 기본보기의 변경 내용을 적용하려면 두 번째로는 여러 사용자가 공유하는보기 문제를 해결할 수 없습니다. –

    +0

    페이지 새로 고침을 방지하려면 을 사용하십시오. Ex '입니다. <셰어 :의 ListView RUNAT = "서버"ID = "ID"/> ' view_unload에서 목록보기를 기본값으로 업데이트하기 때문에 공유보기의 문제가 해결됩니다. –

    +3

    당신은 그것을 얻지 못한다 ....보기 updation의 효과는 변화를 표시하는 새로 고침이 필요합니다. –