我已经创建了一个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()方法,它就可以正常工作,但是当我像这样使用它时,它就不能工作了:
SPContext.Current.List.DefaultView.Query = myStringQuery;
SPContext.Current.List.DefaultView.Update();我将代码放在一个view部件(Page_Load())中,该部件被添加到列表中,代码将执行,但视图仍未过滤。有人知道这可能是什么原因吗?
发布于 2011-09-09 04:05:33
两件事:
首先,确保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();第一行设置DefaultView实例的Query属性,而第二行在DefaultView的新实例上调用Update。
https://stackoverflow.com/questions/7353649
复制相似问题