2011-03-04 19 views

回答

2

您可以使用SPListItemContentType屬性。如果您想要列表中的所有內容類型,則可以使用SPListContentTypes屬性。獲得內容類型參考後,您可以檢查其Fields屬性以獲取列。

的列表項內容類型:

SPContentType contentType = myListItem.ContentType; 

foreach (SPField field in contentType) 
{ 
    // Do your stuff with this column 
} 

的列表內容類型:

SPContentTypeCollection contentTypes = myList.ContentTypes; 
List<object> values = new List<object>(); 
List<SPContentTypeId> blackList = new List<SPContentTypeId>() 
{ 
    SPBuiltInContentTypeId.System, 
    SPBuiltInContentTypeId.Item, 
}; 

var goodContentTypes = contentTypes.Where(c => !blackList.Contains(c.Id)); 

foreach (SPContentType contentType in goodContentTypes) 
{ 
    foreach (SPField field in contentType.Fields) 
    { 
     // Do your stuff with this column e.g. Get value from item 
     values.Add(myListItem[field.InternalName]); 
    } 
} 
+0

這個方法還帶來了我不想要的sharepoint的系統列(創建,選擇,修改等),這就是爲什麼我只想提取列名和它的內容類型值。 – 2011-03-04 19:20:06

+0

您可以根據內容類型的名稱或ID過濾出您不想要的任何內容類型。請參閱[系統內容類型ID的部分列表](http://msdn.microsoft.com/zh-cn/library/ms452896.aspx)。要獲取這些值,可以將您從內容類型獲得的'SPField'與您的實際列表項匹配。 – Chris 2011-03-04 20:27:19

+0

請參閱編輯以查看我最近的評論。 – Chris 2011-03-04 20:35:02

0

獲取表示您的文檔庫的列表。一旦你有了這個,你可以看看列。我通常使用這種方法:

SPWeb web = SPContext.Current.Web; 
SPList list = web.Lists["Your list name"]; 
foreach (String field in list.DefaultView.ViewFields) 
{ 
    //whatever 
} 

我相信給你所有列的默認視圖。你也可以使用這種方法:

SPWeb web = SPContext.Current.Web; 
SPList list = web.Lists["Your list name"]; 
foreach (SPField field in list.Fields) 
{ 
    //whatever 
} 

這將給你列表(庫)中的所有領域的信息,無論視圖。

+0

我的列表默認視圖只包含6個領域。內容類型有大約15個字段。 – 2011-03-04 19:18:14

+0

Abe,你的方法給了我內容類型的列。到現在爲止還挺好。但它只給我列名,我也需要這個值。 – 2011-03-04 19:23:11