2009-03-18 8 views
5

Ciao Sto sviluppando utilizzando lo spazio dei nomi di SharePoint e mi sono imbattuto nel seguente errore quando provo a recuperare un campo Titolo dagli elementi dell'elenco.SharePoint ListItem Errore: "Il valore non rientra nell'intervallo previsto"

Value does not fall within the expected range

So comunque che il campo esiste perché ho stampato tutti i campi.

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

Aggiornamento: In che misura la vista che è stato utilizzato per recuperare le voci di elenco svolgono un ruolo in quello che i campi saranno disponibili? Questo codice ha esito negativo con la stessa eccezione:

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

In entrambi i casi è stata utilizzata la proprietà list.DefaultView per recuperare gli elementi dell'elenco.

risposta

1

Il campo "Titolo" può esistere nell'elenco ma non nella vista predefinita. Puoi farlo?

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

Qualsiasi tentativo di fare riferimento all'elemento ["Titolo"] genera tale eccezione. – Ries

+0

Sto affrontando lo stesso problema –

0

Non so perché, ma ho creato un GridView da SPListItemCollection come DataSource. Ho avuto lo stesso errore. Ma ho cercato di ottenere il dataTable da collezione:

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

E poi vedo nel mio GridView quel campo che contiene i titoli delle voci di elenco si chiama "LinkTitle". Quindi, ho riscritto il mio codice: SPListItemCollection res = da.getAllItems();

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

E tutto funziona bene :)

0

Il "Titolo" campo non è (per impostazione predefinita) disponibili nella visualizzazione predefinita. Se dai un'occhiata alla pagina delle impostazioni della vista, il titolo è selezionato, ma è etichettato come "collegato all'elemento con il menu di modifica".

Il campo esposto dalla vista è in realtà denominato "LinkTitle" (è possibile confermarlo enumerando list.DefaultView.ViewFields).

La soluzione al tuo problema è semplicemente quella di sostituire item.Title con item["LinkTitle"].ToString().

1

Io suggerirei qualcosa come

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

B/C se il campo non è stato richiesto nei SPQuery.ViewFields, probabilmente non può ottenere (eccezioni includono campo Creato, campo ID)

5

Non so se il tuo errore è risolto o meno. Ma stavo affrontando lo stesso problema e ho trovato la soluzione al problema.

si deve andare a:
Centrale Amministrazione> Gestione applicazioni> Gestisci applicazioni Web
selezionare l'applicazione Web in uso e scegliere:
“Generale Impostazioni> Resource Throttling” tramite la barra multifunzione.

In questo scorrere verso il basso e cercare "List View Lookup Threshold" in quello per il valore predefinito è 8 aumentare il valore finché l'errore non è andato.

Reference Link

+1

Ho avuto questo problema. Avevo convalidato che i miei nomi dei campi erano corretti. Inoltre, sembra che Microsoft abbia cambiato il valore predefinito di questo da 8 a 12. Avevo 12 nel mio ambiente di sviluppo ma 8 nell'ambiente di staging in cui il problema è sorto. Ho dovuto ripristinare il pool di app in IIS per rendere effettive le modifiche alle impostazioni. –

1

ho avuto questo problema perché la colonna non faceva parte della visualizzazione predefinita. Invece di fare affidamento sulla vista, eseguire query per le colonne specifiche direttamente durante la creazione di 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(); 
    } 
Problemi correlati