Используйте Web Money - это очень удобно

вторник, 12 февраля 2008 г.

Изменение перечня столбцов в ListViewWebPart "на лету".

Доброго времени суток!
Итак передо мно возникла проблема: отображать различную информацию на одной странице веб частей в зависимости от пользователя, параметра или состояния процесса(проекта) информация о котором отображается.
Задача возникла из необходимости придерживаться одного интерфейса для редактирования и просмотра элементов списка (редактирование косвенное через мой интерфейс). Причем со всеми возможностями Sharepoint.
Итак имеем: список, набор полей которые отображаются всегда, + поле редактирование(мое кастомизированное поле) + набор столбцов - соответствующих пользователям.
Каждый пользователь должен видеть либо мой столбец, либо свой результат.
Или при передаче параметра результат другого человека.
Решение:
Создаем свою веб часть. В ней обращаемся к SPWebPartManager.
SPWebPartManager spwp = (SPWebPartManager)this.WebPartManager;
Ищем необходимую веб часть и меняем у нее listViewWebPart.ListViewXml через XmlDocument xmlDoc = new XmlDocument();
xmlDoc.InnerXml = listViewWebPart.ListViewXml
node = xmlDoc.DocumentElement;
Меняем схему - она довольно сложна поэтому я просто создал веб часть с необходимым мне представлением (со столбцом результата вместо моего кастомного поля) скопировал эту схему вместо текущей схемы.
Заменил в ней параметры:
node.Attributes[0].Value = viewName;//View Name веб части
и название поля на мое - обязательно внутренне(internalName)( для примера Название-Title)
Присвоил listViewWebPart.ListViewXml = xmlDoc.InnerXml;
Все.
Кроме того что я указал также можно написать веб часть поиска, т.к. в схеме указывается CAML запрос. Т.е. можно изменить не только перечень столбцов но и перечень элементов, группировку и т.п. смотрите xml схему.

4 комментария:

Анонимный комментирует...

добавил бы скриншотиков .. не очень понятно

Ruslan комментирует...

Я застопорился на этом месте! "В ней обращаемся к SPWebPartManager.
SPWebPartManager spwp = (SPWebPartManager)this.WebPartManager;
Ищем необходимую веб часть и меняем у нее listViewWebPart.ListViewXml "

КАК это сделать? Покажите пожалуйста пример кода!

Ruslan комментирует...

как найти веб-часть?? :-((

Gleb комментирует...

Вебчасть можно искать по guid списка или просто идентификатору на странице