Search code examples
sharepoint-2010splistitemsplist

Why aren't my Sharepoint List contents being saved to the list?


I'm successfully creating a Sharepoint List (named "XMLToPDFTestList"), which I can see via Site Actions > View All Site Content, but my attempts to add columns to the list has so far proven fruitless.

Here is how I'm trying to do it:

private void ProvisionallyCreateList()
{
    SPWeb mySite = SPContext.Current.Web; 
    // Check to see if list already exists; if so, exit
    if (mySite.Lists.TryGetList(listTitle) != null) return;

    SPListCollection lists = mySite.Lists;
    SPListTemplateType listTemplateType = new SPListTemplateType();
    listTemplateType = SPListTemplateType.GenericList;
    string listDescription = "This list is to hold inputted vals";
    lists.Add(listTitle, listDescription, listTemplateType);

    // Now add a couple of columns
    SPList list = lists["XMLToPDFTestList"];
    string faveNum = list.Fields.Add("favoriteNumber", SPFieldType.Text, false);
    list.Fields[faveNum].Description = "favorite number";
    list.Fields[faveNum].Update();
    string faveCol = list.Fields.Add("favoriteColor", SPFieldType.Text, false);
    list.Fields[faveCol].Description = "favorite color";
    list.Fields[faveCol].Update();
}

This is all I see when I click "XMLToPDFTestList":

enter image description here

My "gut feeling" is that this line:

SPList list = lists["XMLToPDFTestList"];

...is not right/not specific enough. Instead of "XMLToPDFTestList" it should be something else/prepend something, or so. But what, exactly?


Solution

  • It was, as is so often the case, "my bad" (YMMV?).

    The problem is in my list item creation code which, because I was not assigning anything to the default/inherited "Title" field, made it appear to me (as in the scream shot above) that no item was being added.

    Once I fixed the code, by changing this:

    private void SaveInputToList()
    {
        using (SPSite site = new SPSite(siteUrl))
        {
            using (SPWeb web = site.RootWeb)
            {
                SPList list = web.Lists[listTitle];
                SPListItem SPListItemFaveNum = list.Items.Add();
                SPListItemFaveNum["favoriteNumber"] = "7"; //inputtedNumber; TODO: Once 7 and teal are being saved and retrieved successfully, assign the var vals - will need to declare the controls created in CreateChildControls() globally
                SPListItemFaveNum.Update();
                SPListItem SPListItemFaveHue = list.Items.Add();
                SPListItemFaveHue["favoriteColor"] = "teal"; 
                SPListItemFaveHue.Update();
            }
        }
    }
    

    ...to this:

    private void SaveInputToList()
    {
        using (SPSite site = new SPSite(siteUrl))
        {
            using (SPWeb web = site.RootWeb)
            {
                SPList list = web.Lists[listTitle];
                SPListItem spli = list.Items.Add();
                spli["Title"] = "Write the Title";
                spli["favoriteNumber"] = "7"; 
                //SPListItemFaveNum.Update();
                //SPListItem SPListItemFaveHue = list.Items.Add();
                spli["favoriteColor"] = "teal";
                //SPListItemFaveHue.Update();
                spli.Update();
            }
        }
    }
    

    ...it works fine: an item is added with all three values (Title, favoriteNumber, and favoriteColor).

    I was assuming the item wasn't being created because "Title" was blank, and I was calling update on each SPListItem, whereas all I really need to do is call Update once, and on one SPListItem, not multiple.