Это единственный способ эффективно переместить элемент списка. К сожалению, вы теряете весь рабочий процесс и историю версий, связанные с ним. Естественно, если бы вы использовали этот код, ему потребовалась бы небольшая модификация, так как я перемещаю только элемент списка в том же 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();
}