Sharepoint SPQuery关于SPView的问题

Sharepoint SPQuery关于SPView的问题,sharepoint,sharepoint-2010,web-parts,spquery,Sharepoint,Sharepoint 2010,Web Parts,Spquery,我创建了一个CAML查询,以获取列表中的某些特定项,其中包含或: <Or> <Eq><FieldRef Name='Title'/><Value Type='Text'>tileA</Value></Eq> <Eq><FieldRef Name='Title'/><Value Type='Text'>titleB</Value></Eq> <

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

 <Or>
    <Eq><FieldRef Name='Title'/><Value Type='Text'>tileA</Value></Eq>
    <Eq><FieldRef Name='Title'/><Value Type='Text'>titleB</Value></Eq>
 </Or>
我将代码放在一个Web部件(Page_Load())中,该部件被添加到列表中,代码执行,但视图保持未过滤状态。有人知道原因是什么吗

有两件事:

首先,确保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>
我知道代码块看起来是一样的,但是
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);
  }
}

第一行设置了
DefaultView
实例的
Query
属性,而第二行在
DefaultView
的新实例上调用
Update
,至于CAML查询,您是对的,但是查询被包装在其中,只是忘记了在这里添加它,因为我没有访问原始代码的权限。当我在工作中测试你的解决方案时,我会给你一个反馈。感谢关于DefaultView的信息,我一直想知道为什么会发生这种情况……所以很明显,只有当我这样做时,它才会起作用:
SPSite site=SPContext.Current.site
然后使用(SPWeb web=site.RootWeb){var currentView=web.Lists[“myList”].DefaultView;但是,我需要在浏览器中刷新列表以查看更改(我甚至将代码移动到web部件上的OnInit()),因此它仍然远未达到性能要求,但是您的解决方案找到了正确的路径,谢谢!@matt137,不要将RootWeb包装在using语句中。有关更多信息,请参阅。
SPView view = SPContext.Current.List.DefaultView;
view.Query = myStringQuery;
view.Update();
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();