我收到了以下错误...
System.NullReferenceException:未将对象引用设置为对象的实例。 在Microsoft.SharePoint.SPListItem.get_UniqueId() 在Program.cs中的ConsoleApplication1.Program.Main(String [] args):第21行
运行以下代码
using (SPSite site = new SPSite("http://site/"))
{
using (SPWeb web = site.OpenWeb())
{
try
{
SPList list = web.Lists["ListName"]; // 2
SPListItem item = list.Items.Add();
Guid itemId = item.UniqueId;
SPListItem itemUpdate = web.Lists["ListName"].Items[itemId];
itemUpdate["PercentComplete"] = .45; // 45%
itemUpdate.Update();
}
catch (Exception e)
{
Console.WriteLine(e);
Console.ReadLine();
}
}
}
有什么问题?
答案 0 :(得分:10)
如果您尝试更改刚刚插入的列表项的值,则应该使用:
SPList list = web.Lists["ListName"];
//SPListItem item = list.Items.Add();
//item["PercentComplete"] = .45; // 45%
//item.Update();
SPListItemCollection items = list.GetItems(new SPQuery()
{
Query = @"<Where>
<Eq>
<FieldRef Name='Title' />
<Value Type='Text'>Desigining</Value>
</Eq>
</Where>"
});
foreach (SPListItem item in items)
{
item["PercentComplete"] = .45; // 45%
item.Update();
}
如果您需要查找要更新的特定项目,则只需使用list.Items[uniqueId]
或更快list.GetItemByUniqueId(uniqueId)
;使用SPQuery
类可以实现什么。
答案 1 :(得分:4)
Ruben的回答是正确的但是得到的错误很少(可能只是对我来说)因此我调整了一点,然后它工作正常。以下是我需要的代码
SPList list = web.Lists["ListName"];
//SPListItem item = list.Items.Add();
//item["PercentComplete"] = .45;
// 45%//item.Update();
SPQuery oQuery = new SPQuery();
oQuery.Query = @"<Where>
<Eq>
<FieldRef Name='Title' />
<Value Type='Text'>Design</Value>
</Eq>
</Where>";
SPListItemCollection collListItems = list.GetItems(oQuery);
foreach (SPListItem item in collListItems)
{ item["PercentComplete"] = .55;
item.Update();}
答案 2 :(得分:1)
在获取UniqueID之前尝试在列表上调用Update()
SPList list = web.Lists["ListName"]; // 2
SPListItem item = list.Items.Add();
item["Title"] = "Test";
item.Update ();
list.Update ();
Guid itemId = item.UniqueId;
答案 3 :(得分:0)
我最好的问题是,当你这样做时,你的项目尚未在列表中创建:
Guid itemId = item.UniqueId;
SPListItem itemUpdate = web.Lists["ListName"].Items[itemId];
首先在请求uniqueId和/或从列表中获取项目之前执行item.Update()。
PS:我认为你没有理由得到第二个SPItem对象来更新'PercentComplete'信息。