1

OR を含むリストの特定の項目を取得する 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();

リストに追加された Web パーツ (Page_Load()) にコードを配置すると、コードは実行されますが、ビューはフィルタリングされません。その理由が何であるかを知っている人はいますか?

4

1 に答える 1

2

2つのこと:

まず、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();

1 行目Queryは のインスタンスのプロパティを設定DefaultViewし、2 行目はUpdateの新しいインスタンスを呼び出しますDefaultView

于 2011-09-08T20:05:32.527 に答える