2009-03-18 6 views
5

Hi Ich entwickle mit dem SharePoint-Namespace und ich lief in den folgenden Fehler, wenn ich versuche, ein Titelfeld aus den Listenelementen abzurufen.SharePoint ListItem Fehler: "Wert fällt nicht in den erwarteten Bereich"

Value does not fall within the expected range

Ich weiß aber, dass das Feld existiert, weil ich alle Felder ausgedruckt habe.

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

Update: Inwieweit die Ansicht, die verwendet wurde, um die Listenelemente eine Rolle spielen abzurufen in welchen Bereichen verfügbar sein wird? Dieser Code schlägt mit der gleichen Ausnahme fehl:

In beiden Fällen wurde die list.DefaultView-Eigenschaft zum Abrufen der Listenelemente verwendet.

Antwort

1

Das Feld "Titel" kann in der Liste vorhanden sein, aber nicht in der Standardansicht. Können Sie das tun?

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

Jeder Versuch, auf das Element ["Title"] zu verweisen, löst diese Ausnahme aus. – Ries

+0

Ich habe das gleiche Problem –

0

Ich weiß nicht warum, aber ich habe eine GridView von SPListItemCollection als DataSource erstellt. Ich hatte den gleichen Fehler. Aber ich versuchte, das Datatable aus der Sammlung zu erhalten:

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

Und dann sehe ich in meinem Gridview das Feld, den Titel des Listenelementes enthält, wird „Linktitle“ genannt. Also habe ich meinen Code umgeschrieben: SPListItemCollection res = da.getAllItems();

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

Und alles funktioniert gut :)

0

Das Feld "Titel" ist nicht (standardmäßig) in der Standardansicht. Wenn Sie sich die Seite mit den Ansichtseinstellungen ansehen, wird der Titel überprüft, aber er ist als "mit dem Element mit dem Bearbeitungsmenü verknüpft" gekennzeichnet.

Das Feld, das von der Ansicht angezeigt wird, wird tatsächlich "LinkTitle" benannt (Sie können das bestätigen, indem Sie aufzählen).

Die Lösung für Ihr Problem ist einfach item.Title durch item["LinkTitle"].ToString() zu ersetzen.

1

Ich würde vorschlagen, so etwas wie

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

B/c, wenn das Feld nicht in dem SPQuery.ViewFields angefordert wurde, haben Sie wahrscheinlich können sie nicht (Ausnahmen sind Erstellt Feld, ID-Feld)

5

Ich weiß nicht, ob Ihr Fehler gelöst ist oder nicht. Aber ich stand vor demselben Problem und ich fand die Lösung für das Problem.

Sie müssen gehen Sie zu:
Zentrale Verwaltung> Anwendungsverwaltung> Verwalten von Webanwendungen
die Web-Anwendung im Einsatz wählen und wählen:
„Allgemeine Einstellungen> Ressourcensteuerung“ über das Band.

In diesem scrollen Sie nach unten und suchen Sie nach "List View Lookup Threshold" in dem Standardwert ist 8 erhöhen Sie den Wert, bis der Fehler verschwunden ist.

Reference Link

+1

Ich hatte dieses Problem. Ich hatte bestätigt, dass meine Feldnamen korrekt waren. Außerdem scheint Microsoft den Standardwert von 8 auf 12 geändert zu haben. Ich hatte 12 in meiner Entwicklungsumgebung, aber 8 in der Staging-Umgebung, in der das Problem auftrat. Ich musste den App-Pool in IIS zurücksetzen, damit die Einstellungsänderung wirksam wurde. –

1

Ich hatte dieses Problem, weil die Spalte nicht Teil der Standardansicht war. Suchen Sie nicht direkt nach der Ansicht, sondern suchen Sie beim Erstellen der SPListItemCollection direkt nach den einzelnen Spalten.

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(); 
    } 
Verwandte Themen