One of my colleagues asked an interesting question – programmatically, he’d just added a Site Column to a list, and now he wanted to make that column required on that list. The SPField class had a Required property, and on MSDN this is described as
Gets or sets a Boolean value that determines whether users must enter a value for the field on New and Edit forms.
However, this wasn’t what seemed to happen – although he’d set this to true and update the field, it didn’t make the field required.
He came and asked me why – and I didn’t really know. We knew that the radio button on the column settings did what we wanted …
… so we cracked open reflector to take a look. And this is what we found:
Yup, that’s right – if the field is on a list, the list uses content types, and “Advanced Management of Content Types” isn’t set, then the code gets the first (i.e. Default) content type, and sets the SPFieldLink that relates to that field to be required. Finally, it saves changes to the content type.
So, on a list that doesn’t use content types, to make a field required, you have to update the content type. Interesting…