SPList.GetItems(SPView)와 함께 SPQuery 사용
-
10-12-2019 - |
문제
나는 웹 파트 다양한 항목을 표시하는 spgridview 을 기반으로 SPView
.
또한 키워드를 입력하면 입력한 키워드의 일부가 포함된 제목이 있는 모든 항목을 가져오는 검색 모듈을 구현했습니다. SPQuery
.
사용 SPList.GetItems()
사용할 때 잘 작동합니다. SPQuery
=>
var itemCollection = SPList.GetItems(SPQuery);
위의 코드는 내가 원하는 항목을 제공하지만 불행히도 내가 원하지 않는 모든 항목도 제공합니다.내가 원하는 것은 SPView
입력한 키워드와 일치하는 것입니다.
SPView와 함께 SPQuery를 사용할 수 있다는 것을 알았습니다 =>
var itemCollection = SPList.GetItems(SPQuery, "viewName");
꽤 괜찮은 것 같지만 자세히 살펴보면 "viewName"이 실제로는 SPView
아이디 ToString
에드.그리고 만약에 SPQuery
포함 <Where>
절에서 "viewName"은 해당 쿼리를 재정의하고 해당 특정 보기의 모든 항목을 반환합니다.
그래서 제 질문은, SPView
직접적으로 아니면 고통스러운 해결 방법을 찾아야 합니까?
솔루션 코드
힌트를 주신 Simon Doy에게 감사드립니다.
var query = new SPQuery(SPList.GetView(ListViewId))
{
Query = string.Format(string.Concat(
"<Where>",
"<Or>",
"<Or>",
"<Contains>",
"<FieldRef Name='Title'/>",
"<Value Type='Text'>{0}</Value>",
"</Contains>",
"<Contains>",
"<FieldRef Name='FieldAutoGeneratedName'/>",
"<Value Type='Text'>{0}</Value>",
"</Contains>",
"</Or>",
"<Contains>",
"<FieldRef Name='FieldATTCode'/>",
"<Value Type='Text'>{0}</Value>",
"</Contains>",
"</Or>",
"</Where>"
), param)
};
var items = SPList.GetItems(query);
위의 코드는 지정된 목록 보기에서 일치하는 모든 항목을 반환합니다. param
해결책
적절한 SPView를 전달할 수 있는 생성자를 사용하여 SPQuery 개체를 만드는 것은 어떻습니까?
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.spquery.aspx
그런 다음 다음과 같이 적절한 항목을 포함하는 쿼리를 추가할 수 있습니다.
var query = new SPQuery(spView);
query.Query = String.Format("<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>{0}</Value></Eq></Where>", keyword);
SPListItemCollection listItems = oList.GetItems(query);
다른 팁
SPQuery가 목록의 모든 항목을 반환하는 경우 대부분의 경우 QueryString은 단순히 잘못된 것입니다.(내 옵션에서 이상한) 기본 동작은 잘못된 QueryStrings의 경우 Caml-Query가 모든 항목을 반환한다는 것입니다.
일반적인 실수의 예:SPQuery.Query의 QueryString에는 "<Query>"-태그가 포함되어서는 안 됩니다.그렇다면 모든 항목을 반환하고 Where-Clause를 완전히 무시합니다.