2011-10-31 47 views
4

我有一个包含文件夹和项目的列表。这些文件夹是基于文件夹的特定内容类型,但具有属性。如何获取共享点列表中的所有文件夹和项目?

文件夹可以包含子文件夹和子项目。子文件夹可以包含子子文件夹等。我已经设法利用这种方式,所有项目和文件夹:

void TraverseList(SPList list) 
    { 
     Trace.WriteLine("Traversing list: " + list.Title); 
     Trace.WriteLine("Base type: " + list.BaseType.ToString()); 
     TraverseListFolder(list.RootFolder); 
    } 

    void TraverseListFolder(SPFolder folder) 
    { 
     SPQuery qry = new SPQuery(); 
     qry.Folder = folder; 
     Trace.WriteLine("Foldername: " + folder.Name); 
     SPWeb web = null; 

     try 
     { 
      web = folder.ParentWeb; 
      SPListItemCollection ic = web.Lists[folder.ParentListId].GetItems(qry); 

      foreach (SPListItem subitem in ic) 
      { 
       SPFieldLookupValue temp = new SPFieldLookupValue(subitem["TargetPage"].ToString()); 
       Trace.WriteLine("TargetPage: " + temp); 
       Trace.WriteLine("ItemName: " + subitem.Name); 
       if (subitem.Folder != null) 
       { 
        TraverseListFolder(subitem.Folder); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Trace.WriteLine(ex.Message); 
      throw; 
     } 
     finally 
     { 
      if (web != null) 
      { 
       web.Dispose(); 
      } 
     } 
    } 

在这个解决方案的问题是,我要送一个新的查询每个文件夹,这是越来越imperformant当名单还在不断增加。有没有办法通过一个调用来获取整个列表,而不会丢失文件夹/项目结构?

感谢您阅读本文!

编辑:这不是要求使用CAML。但是我忘记了一个限制:由于客户的限制,我无法使用网络服务。

回答

-1
query.ViewAttributes="Scope='RecursiveAll'"; 
+1

请解释你的答案 –

相关问题