2
votes

I'm having trouble figuring out how to add a custom column type to a list with the object model.

SPFieldCollection.Add() has a parameter SPFieldType, but that must be one of the enumerated values in the Microsoft.SharePoint.SPFieldType enumeration, thus it cannot be used to create columns of a custom type.

I next attempted using SPFieldCollection.CreateNewField() but when I call SPField.Update() on the returned value I get an exception: "ArgumentException was unhandled. Value does not fall within the expected range.".

I see a reference to SPFieldCollection.AddFieldAsXml() here: How do I add custom column to existing WSS list template but there's hardly any info and I'm not sure that's the right track to take.

UPDATE: I found a post on AddFieldAsXml: http://weblogs.asp.net/bsimser/archive/2005/07/21/420147.aspx and it turns out it's very easy and worked well for me. Posting anyway in hopes it will help someone else.

2
You should probably move the solution you found into an answer.Alex Angas

2 Answers

3
votes

SPFieldCollection.AddFieldAsXml() is the way to go as far as I can tell. See here for an example: http://weblogs.asp.net/bsimser/archive/2005/07/21/420147.aspx

1
votes
 Try with:

 SPField newField = null;
 newField= web.Fields.CreateNewField("MyFieldTypeName", fieldName); 
 web.Fields.Add(newField);

 newField = web.Fields[fieldName];

 // set some properties
 newField.ShowInDisplayForm = false;
 newField.ShowInViewForms = true;
 newField.Update();