Поделиться через


Возвращение элементов из списка

Дата последнего изменения: 9 марта 2015 г.

Применимо к: SharePoint Foundation 2010

Для возврата элементов из списка используйте один из методов GetItem* класса SPList, чтобы получить объект SPListItemCollection, представляющий нужный элемент или подмножество элементов. В следующей таблице перечисляются методы, предоставляемые SPList.

Метод

Описание

GetItemById(Int32)

Возвращает элемент списка с указанным целочисленным идентификатором.

GetItemByIdAllFields(Int32)

Возвращает элемент списка с указанным целочисленным идентификатором и включает данные всех полей элемента.

GetItemByIdSelectedFields(Int32, [])

Возвращает элемент списка с указанным целочисленным идентификатором и включает только значения для указанных полей.

GetItemByUniqueId(Guid)

Возвращает элемент списка, связанный с указанным глобальный уникальным идентификатором (GUID).

GetItems()

Перегружено. Возвращает коллекцию элементов из списка.

GetItemsWithUniquePermissions()

Перегружено. Возвращает коллекцию элементов списка, не наследующих разрешений системы безопасности от списка, но имеющих уникальный набор разрешений.

В предыдущем примере при возникновении события после заданной даты возвращаются элементы из списка "Календарь" в текущем веб-сайте. Для повышения производительности в примере используется метод 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.

См. также

Ссылка

Microsoft.SharePoint

Концепции

Практическое руководство. Чтение значения поля в элементе списка

Работа с объектами List и коллекциями

Использование Visual Studio для разработки SharePoint

Проверка безопасности и отправка данных для обновления

Несанкционированное получение прав