【问题标题】:Update Sharepoint List Item更新 Sharepoint 列表项
【发布时间】:2010-12-07 09:27:29
【问题描述】:

我收到以下错误...

System.NullReferenceException:对象引用未设置为对象的实例。 在 Microsoft.SharePoint.SPListItem.get_UniqueId() 在 Program.cs:line 21 中的 ConsoleApplication1.Program.Main(String[] args)

运行以下代码

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

        }
    }
}

有什么问题?

【问题讨论】:

  • 我不确定真正的问题,共享指针;你想完成什么任务?

标签: c# asp.net sharepoint wss


【解决方案1】:

如果您尝试更改刚刚插入的列表项的值,您应该使用:

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 类可以完成什么。

【讨论】:

  • 非常感谢!谢谢!现在就试试,让你知道。真的很感激
  • 我几乎没有错误,但我设法通过查看 MS 网站的 SPQuery 类来修复它们。再次感谢您的所有帮助!真的很感激!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    在获取UniqueID之前尝试在列表上调用Update()

     SPList list = web.Lists["ListName"]; // 2        
     SPListItem item = list.Items.Add();
     item["Title"] = "Test";
     item.Update ();
     list.Update ();
     Guid itemId = item.UniqueId;
    

    【讨论】:

    • 谢谢!用于更改名称。它给了我同样的错误 System.NullReferenceException: Object reference not set to an instance of an object 。在 Microsoft.SharePoint.SPListItem.get_UniqueId() 在 ConsoleApplication1.Program.Main(String[] args) 在 C:\Inetpub\wwwroot\......\Program.cs:line 22
    • 修改示例以设置虚拟属性并在获取 Id 之前对项目调用 Update(),此处没有要测试的 MOSS,但这应该可以。
    • 有效,但会创建一个新条目而不是更新它。我真正想要的是更新现有条目
    【解决方案4】:

    我最好的问题是,当您这样做时,您的项目尚未在列表中创建:

    Guid itemId = item.UniqueId;
    SPListItem itemUpdate = web.Lists["ListName"].Items[itemId];
    

    在请求 uniqueId 和/或从列表中取回项目之前,首先执行 item.Update()。

    PS:我认为您没有理由获得第二个 SPItem 对象来更新“PercentComplete”信息。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 2014-10-26
    • 2019-06-06
    • 1970-01-01
    • 2020-08-21
    • 2019-11-07
    • 2011-12-31
    • 1970-01-01
    相关资源
    最近更新 更多