这是我发现有效移动列表项的唯一方法。不幸的是,你放弃了与之相关的所有工作流程和版本历史记录。当然,如果您要使用此代码,则需要稍作修改,因为我只在相同的SPWeb内移动列表项。此外,您需要进行内容类型检查以确保目标列表中可用的字段相同。
private void CopyItem(SPListItem sourceItem, string destinationListName)
{
SPList destinationList = sourceItem.Web.Lists[destinationListName];
SPListItem targetItem = destinationList.Items.Add();
foreach (SPField field in sourceItem.Fields)
{
if (!field.ReadOnlyField && field.InternalName != "Attachments")
{
targetItem[field.Title] = sourceItem[field.Title];
}
}
foreach (string fileName in sourceItem.Attachments)
{
SPFile file = sourceItem.ParentList.ParentWeb.GetFile(
sourceItem.Attachments.UrlPrefix + fileName);
byte[] imageData = file.OpenBinary();
targetItem.Attachments.Add(fileName, imageData);
}
targetItem.Update();
}