2009-04-22 2 views
1

페이지 문서 라이브러리 (표시된 사이트 작업 -> 모든 사이트 컨텐츠 -> 페이지)에 표시된 필드를 사용자 정의합니다.Sharepoint에서 페이지보기 사용자 정의

나보다 셰어 포인트에 대해 더 잘 알고있는 사람이 필자가 기능을 활성화 할 때 프로그래밍 방식으로 기본보기에서 원하지 않는 필드를 제거해야한다고 제안했기 때문에이 코드를 작성했습니다 매우 이상한 해결책처럼, 또한 작동하지 않습니다.

SPWeb web = properties.Feature.Parent as SPWeb; 

     if (web != null) 
     { 
      SPList list = web.Lists["Pages"] as SPList; 
      if (list != null) 
      { 
       foreach (SPField field in list.Fields) 
       { 
        if (field.Title != "Type" && 
         field.Title != "Name" && 
         field.Title != "Modified" && 
         field.Title != "Checked Out To" && 
         field.Title != "Page Layout") 
        { 
         if (list.DefaultView.ViewFields.Exists(field.InternalName)) 
         { 
          list.DefaultView.ViewFields.Delete(field);         
         } 
        } 
       } 

       list.DefaultView.Update(); 
      } 
     } 
    } 

분명히 기능을 활성화 할 때 코드가 실행되어 분명히 잘못되었습니다. 나는 이것에 대한 해결책을 찾았으므로 나는 구글이나이 사이트에서 블라인드하게 명백한 것을 놓친다면 사과한다.

답변

2

이것은 list.DefaultView.ViewFields의 변경 사항이 범위를 벗어나기 때문입니다. Update() 호출에 도달하기 전에 컬렉션이 데이터베이스에서 새로 고쳐집니다. 시도 :

if (list != null) 
{ 
    SPView view = list.DefaultView; 

    foreach (SPField field in list.Fields) 
    { 
     if (field.Title != "Type" && 
      ... 
      field.Title != "Page Layout") 
     { 
      if (view.ViewFields.Exists(field.InternalName)) 
      { 
       view.ViewFields.Delete(field);         
      } 
     } 
    } 

    view.Update(); 
} 
관련 문제