2009-03-18 2 views
5

Привет Я развиваюсь с использованием пространства имен SharePoint, и при попытке получить поле Title из элементов списка я столкнулся с следующей ошибкой.Ошибка SharePoint ListItem: «Значение не входит в ожидаемый диапазон»

Value does not fall within the expected range

Я знаю, что это поле существует, потому что я распечатал все поля.

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

Update: В какой степени Посмотреть, который был использован для получения списка элементов играют роль в том, что поля будут доступны? Этот код не работает с тем же исключением:

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

В обоих случаях для извлечения элементов списка использовалось свойство list.DefaultView.

ответ

1

Поле «Название» может существовать в списке, но не в представлении по умолчанию. Вы можете это сделать?

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

Любая попытка ссылки на пункт [«Название»] выдает это исключение. – Ries

+0

Я столкнулся с такой же проблемой –

0

Я не знаю, почему, но я создал GridView из SPListItemCollection как DataSource. У меня была такая же ошибка. Но я пытался получить DataTable из коллекции:

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

А потом я вижу в моей GridView, что поле, которое содержит название элементов списка называется «LinkTitle». Итак, я переписал свой код: SPListItemCollection res = da.getAllItems();

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

И все работает отлично :) поле

0

«Название» нет (по умолчанию) доступны в представлении по умолчанию. Если вы посмотрите на страницу настроек просмотра, заголовок будет отмечен, но он будет помечен как «связанный с элементом с меню редактирования».

Поле, выставленное на вид, фактически называется «LinkTitle» (вы можете подтвердить это, перечислив list.DefaultView.ViewFields).

Решение проблемы заключается в замене item.Title на item["LinkTitle"].ToString().

1

Я хотел бы предложить что-то вроде

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

В/с, если поле не было предложено в SPQuery.ViewFields, вы, вероятно, не может получить его (исключение составляют Created поле ID поля)

5

Я не знаю, была ли ваша ошибка решена или нет. Но я столкнулся с той же проблемой, и я нашел решение проблемы.

Вы должны пойти:
центра администрирования> Управление приложениями> Управление веб-приложениями
выберите веб-приложение в использовании и выбрать:
«Общие настройки> Resource дросселирования» с помощью ленты.

В этом прокрутке вниз и найдите «List View Lookup Threshold», в котором значение по умолчанию равно 8, чтобы увеличить значение до тех пор, пока ошибка не исчезнет.

Reference Link

+1

У меня была эта проблема. Я подтвердил, что имена моих полей были правильными. Кроме того, похоже, что Microsoft изменила значение по умолчанию этого значения с 8 до 12. У меня было 12 в моей среде разработки, но 8 в промежуточной среде, где возникла проблема. Мне пришлось перезапустить пул приложений в IIS, чтобы изменения настроек вступили в силу. –

1

Я имел этот вопрос, потому что колонна не входила в виду по умолчанию. Вместо того, чтобы полагаться на представление, запрос для конкретных столбцов непосредственно при создании 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(); 
    } 
Смежные вопросы