This is not rocket-science and probably back in beginning of 2007 (or 2003?
) would have last raised someone from her/his seat. But it took me quite some time to find a fully working example of how to create a SharePoint SPList programmatically, add some fields of different types and add those to the default view. Sounds pretty simple, but has some traps in it. So here goes my final (simplified) code, take from it what you can use:
private void CreateEmailTemplatesList(SPWeb web)
{
Guid newListGuid = web.Lists.Add("Email Templates", "Used to store language-sensitive email templates.",
SPListTemplateType.GenericList);
SPList newList = web.Lists[newListGuid];
SPFieldText fldLanguage = (SPFieldText)newList.Fields.CreateNewField(SPFieldType.Text.ToString(), "Language");
fldLanguage.Description = "Lower-Case language (de/it/fr/en).";
fldLanguage.Required = true;
fldLanguage.MaxLength = 2;
SPFieldNumber fldStatus = (SPFieldNumber)newList.Fields.CreateNewField(SPFieldType.Number.ToString(), "Status");
fldStatus.Description = "Status ID.";
fldLanguage.Required = true;
fldStatus.DisplayFormat = SPNumberFormatTypes.NoDecimal;
SPFieldText fldEmailSubject = (SPFieldText)newList.Fields.CreateNewField(SPFieldType.Text.ToString(), "EmailSubject");
fldEmailSubject.Description = "Subject of the email to be sent.";
fldEmailSubject.Required = true;
SPFieldMultiLineText fldEmailBody = (SPFieldMultiLineText)newList.Fields.CreateNewField(SPFieldType.Note.ToString(), "EmailBody");
fldEmailBody.Description = "Body-text of the email to be sent.";
fldEmailBody.Required = false;
fldEmailBody.AllowHyperlink = true;
fldEmailBody.NumberOfLines = 10;
fldEmailBody.RichText = true;
// Add the fields to the list
newList.Fields.Add(fldLanguage);
newList.Fields.Add(fldStatus);
newList.Fields.Add(fldEmailSubject);
newList.Fields.Add(fldEmailBody);
newList.Update();
// Add the fields to the default view of the list
// Must get the fields from the list – InternalName doesn't get refreshed on our instances above!
SPView defaultView = newList.DefaultView;
defaultView.ViewFields.Add(newList.Fields["Language"]);
defaultView.ViewFields.Add(newList.Fields["Status"]);
defaultView.ViewFields.Add(newList.Fields["EmailSubject"]);
defaultView.ViewFields.Add(newList.Fields["EmailBody"]);
defaultView.Update();
}