“Invalid data has been used to update the list item. The field you are trying to update may be read only” error while updating list item.

When working with SharePoint object model  normally you encounter this error when you are trying to update a list item programmatically for a lookup or a people picker type field.

Below I have described how we should go ahead to update listitems for these two types so as to avoid the error.
Lookup Type Field Column
public static SPFieldLookupValue GetLookupFieldFromValue(string lookupValue,string lookupSourceColumn, SPList lookupSourceList)
            {
                    SPFieldLookupValue value = null;
                    SPQuery query = new SPQuery();
                    query.Query = “<Where><Eq><FieldRef Name='” + lookupSourceColumn + “‘/><Value Type=’Text’>” + lookupValue +  “</Value></Eq></Where>”;
                    SPListItemCollection listItems = lookupSourceList.GetItems(query);
                    if(listItems.Count > 0 )
                        value = new SPFieldLookupValue(listItems[0].ID,lookupValue);
                    return value;
            }
lookupValue : Value you want to assign to your item.
lookupSourceColumn : Column name from the source list that you are using as a lookup
lookupSourceList : Name of the source list which is having the column that acts as a datasource for the lookup type column
Now simply refer to the above method and use it to assign it to your list item of lookup type.
item[“LookupField”] = GetLookupFieldFromValue(lookupfieldValue, lookupSourceColumn, listName);
People/User Type Field Column
SPUser user = web.EnsureUser(loginName);
item[“UserTypeFieldName”] = user;
Updating in this manner will wipe out the fear of lookups and people picker fields. Enjoy Coding 🙂
Regards,
Geetanjali
This entry was posted in SharePoint 2010 and tagged , , . Bookmark the permalink.

Leave a comment