Возвращение элементов из списка
Дата последнего изменения: 9 марта 2015 г.
Применимо к: SharePoint Foundation 2010
Для возврата элементов из списка используйте один из методов GetItem* класса SPList, чтобы получить объект SPListItemCollection, представляющий нужный элемент или подмножество элементов. В следующей таблице перечисляются методы, предоставляемые SPList.
Метод |
Описание |
---|---|
Возвращает элемент списка с указанным целочисленным идентификатором. |
|
Возвращает элемент списка с указанным целочисленным идентификатором и включает данные всех полей элемента. |
|
Возвращает элемент списка с указанным целочисленным идентификатором и включает только значения для указанных полей. |
|
Возвращает элемент списка, связанный с указанным глобальный уникальным идентификатором (GUID). |
|
Перегружено. Возвращает коллекцию элементов из списка. |
|
Перегружено. Возвращает коллекцию элементов списка, не наследующих разрешений системы безопасности от списка, но имеющих уникальный набор разрешений. |
В предыдущем примере при возникновении события после заданной даты возвращаются элементы из списка "Календарь" в текущем веб-сайте. Для повышения производительности в примере используется метод GetItems(SPQuery) для сокращения области запрос до ограниченного набора элементов. В примере используется конструктор для создания экземпляра объекта SPQuery, а затем свойству Query объекта запроса присваивается строка на языке CAML, которая указывает внутренний XML-код для запроса (другими словами, элемент <Where>). После установки свойства Query объект запроса передается методу GetItems для возврата и отображения элементов.
Dim listTitle As String = TextBox1.Text
Dim mySite As SPWeb = SPContext.Current.Web
Dim myList As SPList = mySite.Lists(listTitle)
Dim myQuery As New SPQuery()
myQuery.Query = "<Where><Geq><FieldRef Name = ""EventDate""/>" & _
"<Value Type = ""DateTime"">2010-06-01</Value></Geq></Where>"
Dim myItems As SPListItemCollection = myList.GetItems(myQuery)
For i As Integer = 0 To myItems.Count - 1
Dim item As SPListItem = myItems(i)
Label1.Text += SPEncode.HtmlEncode(item("Title").ToString()) & _
SPEncode.HtmlEncode(item("Start Time").ToString()) & _
SPEncode.HtmlEncode(item("End Time").ToString()) & "<BR>"
Next
string listTitle = TextBox1.Text;
SPWeb mySite = SPContext.Current.Web;
SPList myList = mySite.Lists[listTitle];
SPQuery myQuery = new SPQuery();
myQuery.Query = "<Where><Geq><FieldRef Name = \"EventDate\"/>" +
"<Value Type = \"DateTime\">2010-06-01</Value></Geq></Where>";
SPListItemCollection myItems = myList.GetItems(myQuery);
for (int i = 0; i < myItems.Count; i++)
{
SPListItem item = myItems[i];
Label1.Text += SPEncode.HtmlEncode(item["Title"].ToString()) + " : " +
SPEncode.HtmlEncode(item["Start Time"].ToString()) + " : " +
SPEncode.HtmlEncode(item["End Time"].ToString()) + "<BR>";
}
В предыдущем примере предполагается существование текстового поля, которое можно использовать для ввода имени списка, и метки для отображения возвращаемых элементов. Индексаторы используются для возврата списка, указанного пользователем, и для перечисления коллекции элементов. Для работы с отдельными элементами индексаторы используются для указания имен столбцов, из которых извлекаются значения. В данном случае указанные имена полей принадлежат стандартному списку "Календарь" в SharePoint Foundation.
![]() |
---|
Обратите внимание, что в примере коллекция элементов, возвращаемая с помощью свойства, Items назначается объекту SPListItemCollection, после чего выполняется ее перечисление, вместо того, чтобы, например, перебирать значения myList.Items[i] в цикле. Это позволяет повысить производительность, поскольку без такого приема, в цикле при каждой итерации заново создавалась бы вся коллекция элементов. |
В следующем примере возвращается только значение столбца "Title", если значение столбца "Stock" превышает 100.
Dim mySite As SPWeb = SPContext.Current.Web
Dim list As SPList = mySite.Lists("Books")
Dim query As New SPQuery()
query.Query = "<Where><Gt><FieldRef Name='Stock'/><Value Type='Number'>100</Value></Gt></Where>"
Dim myItems As SPListItemCollection = list.GetItems(query)
Dim item As SPListItem
For Each item In myItems
Response.Write(SPEncode.HtmlEncode(item("Title").ToString()) & "<BR>")
Next item
SPWeb mySite = SPContext.Current.Web;
SPList list = mySite.Lists["Books"];
SPQuery query = new SPQuery();
query.Query = "<Where><Gt><FieldRef Name='Stock'/><Value Type='Number'>100</Value></Gt></Where>";
SPListItemCollection myItems = list.GetItems(query);
foreach (SPListItem item in myItems)
{
Response.Write(SPEncode.HtmlEncode(item["Title"].ToString()) + "<BR>");
}
В этом примере предполагается существование списка "Books" со столбцом "Stock", содержащим числовые значения.
![]() |
---|
Для предыдущего примера требуются директивы using (Imports в Visual Basic) для пространств имен Microsoft.SharePoint и Microsoft.SharePoint.Utilities. |
Перекрестные запросы
Для более эффективного получения данных с нескольких веб-сайтов можно выполнять перекрестные запросы. В следующем примере используется класс SPSiteDataQuery для определения запроса, а затем метод GetSiteData возвращает элементы из стандартного списка SharePoint Foundation "Задачи" (задается ServerTemplate = "107"), где значение в столбце "Status" равно "Completed". Список серверных шаблонов SharePoint Foundation см. в SPListTemplateType.
Dim webSite As SPWeb = SPContext.Current.Web
Dim query As New SPSiteDataQuery()
query.Lists = "<Lists ServerTemplate=""107"" />"
query.Query = "<Where><Eq><FieldRef Name=""Status""/>" &
"<Value Type=""Text"">Completed</Value></Eq></Where>"
Dim items As System.Data.DataTable = webSite.GetSiteData(query)
Dim item As System.Data.DataRow
For Each item In items
Response.Write((SPEncode.HtmlEncode(item("Title").ToString()) + "<BR>"))
Next item
SPWeb webSite = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();
query.Lists = "<Lists ServerTemplate=\"107\" />";
query.Query =
"<Where><Eq><FieldRef Name=\"Status\"/>" +
"<Value Type=\"Text\">Completed</Value></Eq></Where>";
System.Data.DataTable items = webSite.GetSiteData(query);
foreach (System.Data.DataRow item in items)
{
Response.Write(SPEncode.HtmlEncode(item["Title"].ToString()) + "<BR>");
}
Для этого примера требуются директивы using (Imports в Visual Basic) для пространств имен Microsoft.SharePoint и Microsoft.SharePoint.Utilities.
См. также
Ссылка
Концепции
Практическое руководство. Чтение значения поля в элементе списка
Работа с объектами List и коллекциями
Использование Visual Studio для разработки SharePoint