我创建了一个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())中,该代码会添加到列表中,代码会执行,但视图仍然未经过滤。谁知道可能是什么原因?
答案 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();
我知道代码块看起来相同,但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
。