关于SPView问题的Sharepoint SPQuery

时间:2011-09-08 19:51:20

标签: sharepoint sharepoint-2010 web-parts spquery

我创建了一个CAML查询来获取列表中的某些特定项目,其中包含OR:

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

现在查询工作正常,如果我将它传递给list.GetItems()metod,但是当我像这样使用它时它不起作用:

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

我将代码放在webpart(Page_Load())中,该代码会添加到列表中,代码会执行,但视图仍然未经过滤。谁知道可能是什么原因?

1 个答案:

答案 0 :(得分: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();

我知道代码块看起来相同,但SPContextDefaultView都不使用私有字段。例如,以下是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