2009-05-06 11 views
4

J'essaie d'afficher les ListItems dans un gridview.Comment accéder aux éléments de liste dans une liste

Aidez-moi à trouver un moyen d'accéder aux éléments de la liste.

using (SPSite site = new SPSite("http://mysitehere......")) 
{ 
    using (SPWeb web = site.OpenWeb()) 
    { 
     SPList list = web.Lists["TestList"]; 
     ....... 
     ....... 
    } 
} 

Aidez-moi à accéder aux éléments de la liste.

Répondre

1

Eh bien, je n'ai pas fait un travail de sharepoint, mais je crois que vous pouvez utiliser:

foreach (SPListItem item in list.Items) 

ou

foreach (SPListItem item in list.GetItems(view)) // or query 

ou un accès par index ou guid:

SPListItem item = list.Items[10]; 
SPListItem item = list.Items[guid]; 
+0

Le est correct, mais il y a une limitation dans l'architecture de SharePoint lors de l'utilisation SPList.Items - il provoque tous les articles à récupérer à partir de la base de données de contenu sur chaque appel, puis la l'énumérateur est renvoyé. La recommandation est de assing list.Items à une boucle variable, puis sur la variable, de sorte foreach (article SPListItem dans list.Items) devient SPListItemCollection listItems = list.Items; foreach (élément SPListItem dans listItems) – dariom

+1

@dariom: Il n'y a aucune différence dans ce code. Une boucle foreach n'exécutera la partie d'initialisation qu'une seule fois. –

3

Utilisez SPDataSource pour afficher les éléments de liste dans une vue de grille, c.-à-d. Créer et configurer un objet SPDataSource et une corbeille d à un contrôle SPGridView.

7

Le code ci-dessous devrait faire l'affaire, obtenir le plein article from msdn here

using (SPSite site = new SPSite("http://mysitehere......")) 
{ 
    using (SPWeb web = site.OpenWeb()) 
    { 
     SPList list = web.Lists["TestList"]; 
     SPListItemCollection collListItems = list.Items; 
     foreach (SPListItem oListItem in collListItems) 
     { 
      string value = SPEncode.HtmlEncode(oListItem["Field1_Name"]); 
      // do something with value 
     } 
    } 
} 
5

Vous pouvez utiliser l'une au-dessous:

 SPList list; 
     foreach (SPListItem item in list.Items) 
     { 
      string title = item["Title"]; 
     } 

     SPQuery query = new SPQuery(); 
     query.ViewFields = "<FieldRef Name='Title'/>"; 
     SPListItemCollection items = list.GetItems(query); 
     foreach (SPListItem item in list.Items) 
     { 
      string title = item["Title"]; 
     } 

     for (int i = 0; i < list.Items.Count; i++) 
     { 
      string title = list.Items[i]["Title"]; 
     } 

Du point de vue de la performance, je suggère d'utiliser la requête SP, vous pouvez alors spécifier les champs à extraire et extraire ou non les métadonnées associées avec les éléments de la liste. Cela entraîne moins d'appels DB.

Cordialement,

1

L'approche SPQuery comme suggéré par des inconnus (Yahoo) est le chemin à parcourir, mais vous devriez vous rappeler que le RowLimit par défaut de SPQuery est de 100:

try 
     { 
      using (SPSite site = new SPSite(theURL)) 
      { 
       SPWeb web = site.OpenWeb(); 
       SPList list = web.Lists["TheNameOfTheList"]; 

       //search each ListItem where the date is after 1/1 2009 
       SPQuery query = new SPQuery(); 

       //the default is 100, which is less then the expected max 
       query.RowLimit = 500; 

       // The U2U CAML Query builder rules :-) 
       query.Query = "<Where><Gt><FieldRef Name='StartDate' /><Value Type='DateTime'>"; 
       query.Query += "2009-01-01T00:00:00Z</Value></Gt></Where>"; 
       SPListItemCollection resultset = list.GetItems(query); 
       foreach (SPListItem item in resultset) 
       { 
        // do something 
       } 
      } 
     } 
1

Si you' re using .NET 3.5 Je recommanderais d'utiliser la source de données linq avec spgridview pour lier des splistitems à un gridview. Vous fait gagner beaucoup de temps. J'ai un example de ceci sur mon blog. Pour afficher les images, vous devez obtenir l'URL de l'image. Voici un exemple de cela:

SPListItem item = GetItem(); 
string imagefieldhtml = item["NameOfImageField"].ToString(); 
ImageFieldValue imagefield = new ImageFieldValue(imagefieldhtml); 

var url = imagefield.ImageUrl; 

La variable url va maintenant contenir l'URL de l'image.

2

Pour afficher des éléments dans une grille (si vous ne voulez pas utiliser SPGridView), j'utiliserais la méthode GetDataTable, au lieu d'utiliser une boucle foreach comme le font beaucoup de réponses.

if (items.Count > 0) 
{ 
    DataTable dt = items.GetDataTable(); 
    GridView1.DataSource = dt; 
    GridView1.DataBind(); 
} 
0

Ok, j'ai résolu le problème ci-dessus. Dans mon cas, je n'ai pas eu besoin d'utiliser le SPEncode.HTML, donc j'ai commenté tout ce qui n'est pas nécessaire. Voici le code fixe si quelqu'un d'autre a besoin il:

using (SPSite site3 = SPContext.Current.Site) 
{ 
    using (SPWeb web2 = site3.OpenWeb()) 
    { 

     // SPWeb site3 = SPContext.Current.Site.RootWeb; 
     SPList list2 = web2.Lists["Configuration"]; 
     SPListItemCollection collListItems = list2.Items; 

     foreach (SPListItem oListItem in list2.Items) 
     { 
      //string value = SPEncode.HtmlEncode.ToString(oListItem["List name"]); 
      string valueListName = oListItem["List name"].ToString(); 
      string valueListURL = oListItem["List URL"].ToString(); 
     } 
    } 
} 
Questions connexes