2011-03-04 21 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