更新Sharepoint列表项

时间:2009-10-16 14:21:42

标签: c# asp.net sharepoint wss

我收到了以下错误...

  

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();

        }
    }
}

有什么问题?

4 个答案:

答案 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'信息。