Sharepoint SPQuery для проблемы SPView - PullRequest
       29

Sharepoint SPQuery для проблемы SPView

1 голос
/ 08 сентября 2011

Я создал CAML-запрос для получения определенных элементов в списке, который содержит ИЛИ:

 <Or>
    <Eq><FieldRef Name='Title'/><Value Type='Text'>tileA</Value></Eq>
    <Eq><FieldRef Name='Title'/><Value Type='Text'>titleB</Value></Eq>
 </Or>

Теперь запрос работает нормально, если я передаю его методу list.GetItems (), но онне работает, когда я так его использую:

SPContext.Current.List.DefaultView.Query = myStringQuery;
SPContext.Current.List.DefaultView.Update();

Я помещаю код в веб-часть (Page_Load ()), которая добавляется в список, код выполняется, но представление остается нефильтрованным.Кто-нибудь знает, что может быть причиной этого?

1 Ответ

2 голосов
/ 09 сентября 2011

Две вещи:

Сначала убедитесь, что ваш CAML заключен в элемент Where:

<Where>
    <Or>
        <Eq><FieldRef Name='Title'/><Value Type='Text'>tileA</Value></Eq>
        <Eq><FieldRef Name='Title'/><Value Type='Text'>titleB</Value></Eq>
    </Or>
</Where>

Во-вторых, переставьте код следующим образом:

SPView view = SPContext.Current.List.DefaultView;
view.Query = myStringQuery;
view.Update();

Я знаю, что блоки кода выглядят одинаково, но ни SPContext, ни DefaultView не используют закрытые поля. Например, вот реализация DefaultView:

internal SPView DefaultView
{
  get
  {
    if (this.m_iDefaultViewIndex == -1)
      return (SPView) null;
    else
      return this[this.m_iDefaultViewIndex];
  }
}

public SPView this[int iIndex]
{
  get
  {
    if (iIndex < 0 || iIndex >= this.Count)
      throw new ArgumentOutOfRangeException();
    else
      return new SPView(this, this.m_arrViewSchema, iIndex);
  }
}

Так же с:

SPContext.Current.List.DefaultView.Query = myStringQuery;
SPContext.Current.List.DefaultView.Update();

Первая строка устанавливает свойство Query экземпляра DefaultView, а вторая строка вызывает Update для нового экземпляра DefaultView.

...