2012-09-05 4 views
1

기존 XlstListviewwebpart에 새 항목 추가 링크를 표시하려고합니다. 그러나 아래 코드는 작동하지 않습니다. http://suryapulipati.blogspot.be/2011/08/sharepoint-2010-show-add-new-item-or.htmlShow 프로그래밍 방식으로 XsltListViewWebPart에 새 항목 추가

을하지만 항상 내가이 좋아했다 enter image description here

private void ShowAddOrganisationLinkOnHomePage(string webUrl) 
     { 
      Logger.LogDebug("NLSponsoringSiteConfigSponsoringCentralEventReceiver", "ConfigureOrganisationDashboard(SPWeb currentWeb)", "BEGIN");   
      SPSecurity.RunWithElevatedPrivileges(delegate() 
      { 
       SPFile pageOrganisation = null; 
       using (SPWeb oHomeWeb = new SPSite(webUrl).OpenWeb()) 
       { 
        try 
        {      
         pageOrganisation = oHomeWeb.GetFile("default.aspx"); 
         pageOrganisation.CheckOut(); 
         string idWebPartRootOrganisation = "ID_RootOrganisation"; 
         oHomeWeb.AllowUnsafeUpdates = true; 
         using (SPLimitedWebPartManager mgrPageManager = pageOrganisation.GetLimitedWebPartManager(PersonalizationScope.Shared)) 
         { 
          SPList organisations = oHomeWeb.GetSafeListByName(SponsoringCommon.Constants.LISTNAMES_ORGANISATIONS2); 
          XsltListViewWebPart lvwpOrganisation = mgrPageManager.WebParts[idWebPartRootOrganisation] as XsltListViewWebPart; 
          SPView oCustomView = organisations.Views[SponsoringCommon.Constants.VIEWS_ORGANISATION_DASHBOARD_NAME]; 

          PropertyInfo nodeProp = oCustomView.GetType().GetProperty("Node", BindingFlags.NonPublic | BindingFlags.Instance); 
          XmlNode node = nodeProp.GetValue(oCustomView, null) as XmlNode; 
          XmlNode toolbarNode = node.SelectSingleNode("Toolbar"); 
          if (toolbarNode != null) 
          { 
           if (!toolbarNode.Attributes["Type"].Value.Equals("Freeform")) 
           { 
            toolbarNode.Attributes["Type"].Value = "Freeform"; 
           } 
          } 
          oCustomView.Update(); 
          mgrPageManager.SaveChanges(lvwpOrganisation);       
         } 
        } 
        catch (Exception) 
        { 
         oHomeWeb.AllowUnsafeUpdates = false; 
         if (pageOrganisation != null) pageOrganisation.UndoCheckOut(); 
         throw; 
        } 
        finally 
        { 
         pageOrganisation.CheckIn(string.Empty); 
         oHomeWeb.AllowUnsafeUpdates = false; 
        }      
       } 
      }); 
     } 

답변

2

널 toolbarnode입니다 : : 여기이 발견

using (SPLimitedWebPartManager mgrPageManager = pageOrganisation.GetLimitedWebPartManager(PersonalizationScope.Shared)) 
         { 
          SPList organisations = oHomeWeb.GetSafeListByName(SponsoringCommon.Constants.LISTNAMES_ORGANISATIONS2); 
          XsltListViewWebPart lvwpOrganisation = mgrPageManager.WebParts[idWebPartRootOrganisation] as XsltListViewWebPart; 
          Functions.SetToolbarType(lvwpOrganisation, "Freeform"); 

          mgrPageManager.SaveChanges(lvwpOrganisation);       
         } 


public static void SetToolbarType(XsltListViewWebPart lvwp, string viewType) 
     { 
      try 
      { 
       MethodInfo ensureViewMethod = lvwp.GetType().GetMethod("EnsureView", BindingFlags.Instance | BindingFlags.NonPublic); 
       object[] ensureViewParams = { }; 
       ensureViewMethod.Invoke(lvwp, ensureViewParams); 
       FieldInfo viewFieldInfo = lvwp.GetType().GetField("view", BindingFlags.NonPublic | BindingFlags.Instance); 
       SPView view = viewFieldInfo.GetValue(lvwp) as SPView; 
       Type[] toolbarMethodParamTypes = { Type.GetType("System.String") }; 
       MethodInfo setToolbarTypeMethod = view.GetType().GetMethod("SetToolbarType", BindingFlags.Instance | BindingFlags.NonPublic, null, toolbarMethodParamTypes, null); 
       object[] setToolbarParam = { viewType }; //set the type here 
       setToolbarTypeMethod.Invoke(view, setToolbarParam); 
       view.Update(); 
      } 
      catch { } 
     } 
+0

이 SP2013 정말 잘 작동합니다! 나는 툴바를 변경하기 위해 사용자 webpart 관리자에게하지 않았다. 단지 SetToolBarType() 메소드가 트릭을 수행했다. – SAV

관련 문제