从理论上讲,有一个简单到难以置信的解决办法:SPListItem提供了一个CopyTo(destinationUrl)方法(可参考MSDN)。不幸的是,这个方法似乎用不了。至少对我的情况(一个带附件的自定义列表)是如此。总是告诉我找不到源列表项,没有读取权限,或者列表没有发布等等。从网上找到很多帖子,其他人也遇到同样的问题。最好的解决方案就是自己实现。
首先设计方法的参数和返回值类型:
public static SPListItem CopyItem(SPListItem sourceItem,string destinationListName)
内容部分首先是创建目标列表项。然后把源列表项的字段复制到目标项。
//复制sourceItem到destinationList
SPList destinationList=sourceItem.Web.Lists(destinationListName);
SPListItem targetItem=destinationList.Items.Add();
foreach(SPField f in sourceItem.Fields)
{
if(!f.ReadOnlyField && f.InternalName!="Attachments")
{
targentItem[f.InternalName]=sourceItem[f.InternalName];
}
}
代码中跳过了只读字段和附件。对于附件我们这样处理: