2012-01-04 19 views
7

En un evento pageLoad quiero ir a dos listas de SharePoint diferentes y obtener el primer ListItem de una lista y el último ListItem en otra. No conozco ninguno de los ID de ListItem, así que supongo que esto debe hacerse a través del índice de la lista, pero no estoy seguro de cómo implementarlo. Después de haber manejado la Lista, ¿alguien puede aconsejar (usando C#) la mejor manera de obtener los primeros y últimos ítems para el escenario descrito anteriormente?Obtener el primer y último ListItem en Sharepoint List

Respuesta

14

La condición "primer elemento" y "último elemento" no es muy clara. Suponiendo que desea recuperar el primero y el último artículo creado. Es importante tener en cuenta que recuperar elementos a través del índice SPListItemCollection puede ser lento para listas grandes ya que al acceder al SPList.Items se devuelven todos los elementos de la lista. Es por eso que se sugiere emplear una consulta CAML:

SPList list = // some list; 
SPQuery query = new SPQuery(); 
query.RowLimit = 1; 
query.Query = "<OrderBy><FieldRef Name='ID' /></OrderBy>"; 

return list.GetItems(query).Cast<SPListItem>().FirstOrDefault(); 

Para el "último elemento" hay que invertir el orden:

<OrderBy><FieldRef Name='ID' Ascending='FALSE' /></OrderBy> 

Si desea obtener el último y el primer elemento basado en otra condición que solo tiene que cambiar el orden por campo.

Actualización:
Aún mejor sería para ordenar por el campo ID. Con eso podrías lograr el mismo resultado. No solo mejor, el campo creado podría haberse cambiado a través del código como lo señala @Kobi.

+1

Muy bonito. También recomendaría usar la ID, la fecha "creada" se puede establecer por código. Además, si las listas son pequeñas, no estoy seguro de que me molestaría con la consulta. – Kobi

+0

@Kobi, eso es cierto. Cambiaré mi ejemplo a ID ... thx. – Stefan

2

Puede probar esto para conseguir la última ItemID

SPWeb web = SPContext.Current.Web; 
      SPList List = web.Lists[ListName]; 

      int itemId = List.Items[List.ItemCount - 1].ID; 

Saludos!

+1

si eliminamos dos elementos no funciona gona – TinTin

+0

Esto funcionó muy bien para mí. Necesitaba realizar algunas operaciones en una SPListCollection ordenada, y necesitaba un valor del último elemento antes de pasar por encima de todas. Esto me permitió hacerlo sin escribir una consulta CAML adicional. ¡Gracias! – Chronozoa

+0

¿Qué tal artículos retirados? –

Cuestiones relacionadas