2009-03-18 3 views
5

Hola, estoy desarrollando usando el espacio de nombre de SharePoint y me encontré con el siguiente error cuando intento recuperar un campo Título de los elementos de la lista.SharePoint ListItem Error: "El valor no está dentro del rango esperado"

Value does not fall within the expected range

Sé sin embargo que el campo existe porque imprimí todos los campos.

string value = (string)listItem[listItem.Fields["Title"].Id]; 
Console.WriteLine("Title = " + value); 

Actualización: ¿En qué medida la opinión de que se utiliza para recuperar los elementos de la lista juegan un papel en lo que se encontrarán disponibles? Este código falla con la misma excepción:

SPListItemCollection items = list.GetItems(list.DefaultView); 
foreach (SPListItem listItem in items) 
{ 
    try 
    { 
    Console.WriteLine("Title = " + listItem.Title); 
    } 
    catch (Exception e) 
    { 
    Console.WriteLine("Exception: " + e.Message); 
    } 
} 

En ambos casos, se utilizó la propiedad list.DefaultView para recuperar los elementos de la lista.

Respuesta

1

El campo "Título" puede existir en la lista pero no en la vista predeterminada. ¿Puedes hacer esto?

foreach (var item in list.Items) Console.WriteLine((string)item["Title"]); 
+0

Cualquier intento de hacer referencia al elemento ["Título"] arroja esa excepción. – Ries

+0

Estoy enfrentando el mismo problema –

0

No sé por qué, pero creé un GridView de SPListItemCollection como un DataSource. Yo tenía el mismo error. Pero traté de conseguir la dataTable de la colección:

SPListItemCollection res = da.getAllItems(); 
DataTable dt = res.GetDataTable(); 

Y luego veo en mi GridView ese campo que contiene títulos de elementos de la lista se llama "linkTitle". Entonces, reescribí mi código: SPListItemCollection res = da.getAllItems();

gridView.DataSource = res.Cast<SPListItem>().Select(a=> a["LinkTitle"]); 
gridView.DataBind(); 

Y todo funciona bien :) campo

0

el "título" no es (por defecto) disponible en la vista predeterminada. Si echas un vistazo a la página de configuración de vista, el Título está marcado, pero está etiquetado como "vinculado al elemento con menú de edición".

El campo expuesto por la vista se llama realmente "LinkTitle" (puede confirmarlo enumerando list.DefaultView.ViewFields).

La solución a su problema es simplemente reemplazar item.Title con item["LinkTitle"].ToString().

1

me gustaría sugerir algo así como

if (item.Fields.ContainsField("Last_x0020_Modified")) 
{ 
    if (query.ViewFields.Contains("Last_x0020_Modified")) 
    ... 

B/c si el campo no se solicitó en las SPQuery.ViewFields, es probable que no se puede conseguir (las excepciones incluyen Creado campo, campo ID)

5

No sé si su error está resuelto o no. Pero estaba enfrentando el mismo problema y encontré la solución al problema.

usted tiene que ir a:
central Administración> Administración de aplicaciones> Administrar aplicaciones web
seleccione la aplicación web en uso y elija:
“Ajustes> Recursos estrangulamiento” a través de la cinta.

En eso desplácese hacia abajo y busque "List View Lookup Threshold" en que por defecto el valor es 8 aumente el valor hasta que el error desaparezca.

Reference Link

+1

Tuve este mismo problema. Validé que mis nombres de campo eran correctos. Además, parece que Microsoft ha cambiado el valor predeterminado de 8 a 12. Tuve 12 en mi entorno de desarrollo pero 8 en el entorno de preparación donde surgió el problema. Tuve que restablecer el grupo de aplicaciones en IIS para que el cambio de configuración surta efecto. –

1

tuve este problema debido a que la columna no era parte de la vista por defecto. En lugar de confiar en la vista, consulte las columnas específicas directamente al crear SPListItemCollection.

SPList cityList = web.Lists[cityListName]; 
    SPListItemCollection items = cityList.GetItems("Title","LocCode"); 
    foreach (SPListItem item in items) 
    { 
      cityName = item["Title"].ToString().Trim(); 
      cityCode = item["LocCode"].ToString().Trim(); 
    } 
Cuestiones relacionadas