Как отфильтровать Sharepoint:ListView

В VS2010 у меня есть проект SharePoint 2010 со страницей приложения. На этой простой странице у меня есть информация заголовка о заказе и SharePoint:ListView для сведений о продукте. Итак, я просто хочу отфильтровать этот ListView по OrderId:

SPWeb myWeb = SPControl.GetContextWeb(Context);
SPList lstOrderDetail = myWeb.Lists["OrderDetail"];
SPView vwOrderDetail = lstProductosPedidos.Views["ShortedForCustomer"];
lvOrderDetail.ListId = lstOrderDetail.ID.ToString("B").ToUpperInvariant();
lvOrderDetail.ViewId = vwOrderDetail.ID.ToString("B").ToUpperInvariant();
lvOrderDetail.DataBind();

Этот код показывает список со всеми элементами в списке "OrderDetail".

Я пытался сделать это с помощью SPQuery, но не знаю, как связать SPListItemCollection (результат запроса) с SharePoint:ListView.

SPQuery qryOrderDetail = new SPQuery(vwOrderDetail);
qryOrderDetail.Query = string.Format(@"
  <Where>
    <Eq>
      <FieldRef Name='OrderId' LookupID='True'/>
      <Value Type='Number'>{0}</Value>
    </Eq>
  </Where>", iOrderID);
SPListItemCollection lstOrderDetailFiltered = lstProductosPedidos.GetItems(qryOrderDetail);

Как я могу отфильтровать SharePoint:ListView с результатом SPQuery? Я использую неправильные компоненты?

Заранее спасибо...


person Dani Rodríguez    schedule 06.10.2011    source источник


Ответы (2)


Хорошая попытка там!

Вы можете установить строку запроса с помощью параметра query представления списка. Итак, учитывая ваш код выше, вам понадобится следующее:

SPView vwOrderDetail = lstProductosPedidos.Views["ShortedForCustomer"];
vwOrderDetail.Query = string.Format(@"
  <Where>
    <Eq>
      <FieldRef Name='OrderId' LookupID='True'/>
      <Value Type='Number'>{0}</Value>
    </Eq>
  </Where>", iOrderID);
vwOrderDetail.Update();

Пример вы можете найти здесь: Использование класса SPView SharePoint и CAML в качестве языка запросов и MSDN здесь: SPView.Query.

person Dennis G    schedule 06.10.2011
comment
Это работает нормально, спасибо. Но это решение изменяет фильтр просмотра для всех, и myWeb.AllowUnsafeUpdates должен быть включен. Я полагаю, что есть лучшее решение, но пока я могу продолжить. Спасибо! - person Dani Rodríguez; 06.10.2011
comment
Вы хотите, чтобы вид изменялся только для определенных лиц? Тогда вам лучше создать новое представление и прикрепить к нему запрос. - person Dennis G; 06.10.2011

Этот код работает для меня.

SPSite oSite = new SPSite([Site URL]);// [Site URL] change it to your sharepoint site URL
SPWeb oWeb = oSite.OpenWeb();
SPList oList = oWeb.Lists["shared documents"];  
SPViewCollection oViewCollection = oList.Views;

            string strViewName = "MyCustomView";

            System.Collections.Specialized.StringCollection viewFields =
            new System.Collections.Specialized.StringCollection();

            viewFields.Add("Name");
            viewFields.Add("Type");

            string query = "<Where><Eq><FieldRef Name=\"Name\"/>" +
                "<Value Type=\"Text\">mysample</Value></Eq></Where>";// here you can filter your items using the selected
                                                                         item in the dropdownlist
            oViewCollection.Add(strViewName, viewFields, query, 100, true, false);

 oWeb.Update();
person Rony SP    schedule 24.02.2012