Я добавляю новое поле в список и просматриваю. Чтобы добавить поле в представление, я использую этот код:
view.ViewFields.Add("My New Field");
Однако это просто прикрепляет его к концу обзора. Как добавить поле в определенный столбец или изменить порядок полей? view.ViewFields - это объект SPViewFieldCollection, который наследуется от SPBaseCollection, и отсутствуют доступные методы Insert / Reverse / Sort / RemoveAt.





Я обнаружил, что удаление всех элементов из списка и чтение их в нужном мне порядке работает хорошо (хотя и немного радикально). Вот код, который я использую:
string[] fieldNames = new string[] { "Title", "My New Field", "Modified", "Created" };
SPViewFieldCollection viewFields = view.ViewFields;
viewFields.DeleteAll();
foreach (string fieldName in fieldNames)
{
viewFields.Add(fieldName);
}
view.Update();
@user это не так. Он удаляет поля из списка, а не из самого списка
Вы должны использовать следующий метод, чтобы изменить порядок поля
string reorderMethod = @"<?xml version = ""1.0"" encoding = ""UTF-8""?>
<Method ID = ""0,REORDERFIELDS"">
<SetList Scope = ""Request"">{0}</SetList>
<SetVar Name = ""Cmd"">REORDERFIELDS</SetVar>
<SetVar Name = ""ReorderedFields"">{1}</SetVar>
<SetVar Name = ""owshiddenversion"">{2}</SetVar>
</Method>";
Вы можете использовать метод по умолчанию:
int newFieldOrderIndex = 1;
SPViewFieldCollection viewFields = view.ViewFields;
viewFields.MoveFieldTo(fieldName, newFieldOrderIndex);
view.Update();
https://msdn.microsoft.com/EN-US/library/microsoft.sharepoint.spviewfieldcollection.movefieldto.aspx
У меня было два разных списка и похожий вид. Я хотел обновить порядок полей в представлении списка адресатов, если пользователь меняет порядок в исходном представлении.
ViewFieldCollection srcViewFields = srcView.ViewFields;
ViewFieldCollection destViewFields = destView.ViewFields;
var srcArray = srcViewFields.ToArray<string>();
var destArray = destViewFields.ToArray<string>();
foreach (var item in destArray)
{
destViewFields.MoveFieldTo(item, Array.IndexOf(srcArray, item));
destView.Update();
}
Не могли бы вы дать более конкретный ответ, было бы неплохо немного пояснить.
Если вы удалите поле / столбец из списка, вы также потеряете его содержимое. Иногда это очень и очень плохо (и, черт возьми, это нужно отметить!)