Partager via


Procédure : renvoyer des éléments à partir d'une liste

Dernière modification : vendredi 9 avril 2010

S’applique à : SharePoint Foundation 2010

Pour retourner des éléments à partir d’une liste, utilisez l’une des méthodes GetItem* de la classe SPList afin d’obtenir un objet SPListItemCollection qui représente l’élément ou le sous-ensemble d’éléments dont vous avez besoin. Le tableau suivant répertorie les méthodes fournies par SPList.

Méthode

Description

GetItemById(Int32)

Retourne l’élément de liste portant l’ID d’entier spécifié.

GetItemByIdAllFields(Int32)

Retourne l’élément de liste portant l’ID d’entier spécifié et inclut les données de tous les champs de l’élément.

GetItemByIdSelectedFields(Int32, [])

Retourne l’élément de liste portant l’ID d’entier spécifié et inclut uniquement les valeurs des champs spécifiées.

GetItemByUniqueId(Guid)

Retourne l’élément de liste associé à l’identificateur unique global (GUID) spécifié.

GetItems()

Surchargé. Retourne une collection d’éléments à partir de la liste.

GetItemsWithUniquePermissions()

Surchargé. Retourne une collection d’éléments de liste qui n’héritent pas les autorisations de sécurité de la liste, mais qui disposent d’un jeu d’autorisations unique.

L’exemple suivant retourne des éléments de la liste Calendar dans le site Web actuel si l’événement se produit après une date spécifiée. Pour améliorer les performances, l’exemple utilise la méthode GetItems(SPQuery) afin de limiter l’étendue de la requête à un ensemble d’éléments spécifique. L’exemple utilise un constructeur pour instancier un objet SPQuery , puis affecte à la propriété Query de l’objet requête une chaîne en langage CAML (Collaborative Application Markup Language) qui spécifie le XML interne de la requête (en d’autres termes, l’élément <Where>). Une fois la propriété Query définie, l’objet requête est passé à la méthode GetItems pour renvoyer et afficher les éléments.

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>"; 
}

L’exemple précédent suppose l’existence d’une zone de texte qui permet de taper le nom d’une liste, et d’une étiquette qui permet d’afficher les éléments retournés. Des indexeurs permettent de retourner la liste tapée par l’utilisateur et d’énumérer la collection d’éléments. Pour que des éléments spécifiques puissent être utilisés, des indexeurs permettent de spécifier les noms des colonnes desquelles les valeurs doivent être récupérées. Dans ce cas, les noms de champ spécifiés appartiennent à une liste Calendrier SharePoint Foundation standard.

Important

Notez que l’exemple attribue la collection d’éléments retournée par la propriété Items à un objet SPListItemCollection, qu’il énumère ensuite, au lieu d’énumérer, par exemple, myList.Items[i] dans la boucle. Cela améliore les performances, car sans cette logique, la boucle recréerait la totalité de la collection d’éléments à chaque itération.

L’exemple de code suivant montre comment renvoyer uniquement les valeurs des colonnes Title lorsque la valeur de la colonne Stock est supérieure à 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>"); 
}

Il suppose l’existence d’une liste Books dont la colonne Stock contient des valeurs numériques.

Notes

Les exemples de code précédents requièrent des directives using (Imports in Visual Basic) pour les espaces de noms Microsoft.SharePoint et Microsoft.SharePoint.Utilities.

Requêtes de liste croisée

Vous pouvez lancer des requêtes de liste croisée pour rechercher plus efficacement des données sur plusieurs sites Web. L’exemple de code suivant utilise la classe SPSiteDataQuery pour définir une requête, puis utilise la méthode GetSiteData pour renvoyer les éléments à partir d’une liste standard Tasks SharePoint Foundation (spécifiée par ServerTemplate = "107") dont la colonne Status contient la valeur « Completed » (Terminé). Pour une liste des modèles de serveur SharePoint Foundation, voir 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>");
}

Cet exemple nécessite des directives using (Imports dans Visual Basic) pour les espaces de noms Microsoft.SharePoint et Microsoft.SharePoint.Utilities.

Voir aussi

Référence

Microsoft.SharePoint

Concepts

Procédure : lire la valeur d’un champ d’un élément de liste

Utilisation des objets Liste et des collections

Utilisation de Visual Studio pour le développement SharePoint

Validation de la sécurité et utilisation des publications pour la mise à jour des données

Élévation de privilège