Использование XsltListViewWebPart для динамически изменяемого представления элементов списка

Многие разработчики сталкиваются с ситуацией, когда им необходимо осуществить вывод элементов списка в представлении, близком к оригинальному представлению списков SharePoint. При этом использование SPD или создание целого набора представлений списка не желательно.

В этом случае нам может помочь создание собственных элементов управления, содержащих стандартную XsltListViewWebPart.

Что для этого необходимо:

1. Создать web-часть  или ascx-файл, содержащий определение XsltListViewWebPart:

<SharePoint:XsltListViewWebPart ID="listView" runat="server" />

2. В одном из событий элемента управления, установить необходимые свойства:

// Получить представление и список

SPList list= web.GetList(SPUrlUtility.CombineUrl(web.ServerRelativeUrl, "/lists/list" ));

SPView view = list.Views[0];

XElement viewElement = XElement.Parse(view.HtmlSchemaXml);

// Изменить Xml содержимое представление в соответствии со схемой CAML и требуемыми параметрами отображения

XElement curQueryElement = viewElement.Element("Query");

XElement newQueryElement= new XElement("Eq",new XElement("FieldRef", new XAttribute("Name", "Category"), new XAttribute("LookupId", "TRUE")),new XElement("Value", new XAttribute("Type", "Lookup" ), {Value} ));

if(null == curQueryElement.Element("Where" ))

curQueryElement.Add(new XElement("Where" , newQueryElement));

else

curQueryElement.Element("Where").ReplaceWith(new XElement("Where" , newQueryElement));

// Обновить параметры нашей web-части

this.listView.ListName = list.ID.ToString("B").ToUpper();

this.listView.ChromeType = PartChromeType.None;

this.listView.ViewGuid = view.ID.ToString("B" ).ToUpper();

this.listView.XmlDefinition = viewElement.ToString();

Действуя таким образом, мы можем добиться полного соответствия визуального представления списка элементов стандартному, при этом, используя необходимые нам параметры представления.