Ошибка SharePoint ListItem: «Значение не попадает в ожидаемый диапазон» - PullRequest
7 голосов
/ 18 марта 2009

Здравствуйте, я занимаюсь разработкой с использованием пространства имен SharePoint, и я столкнулся со следующей ошибкой при попытке извлечь поле заголовка из элементов списка.

Значение не попадает в ожидаемый диапазон

Однако я знаю, что поле существует, потому что я распечатал все поля.

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

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

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 использовалось для извлечения элементов списка.

Ответы [ 6 ]

5 голосов
/ 17 февраля 2014

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

Вы должны перейти на:
Центр администрирования> Управление приложениями> Управление веб-приложениями
выберите используемое веб-приложение и выберите:
«Общие настройки> Регулирование ресурсов» через ленту.

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

Ссылочная ссылка

1 голос
/ 26 марта 2016

У меня была эта проблема, потому что столбец не был частью представления по умолчанию. Вместо того чтобы полагаться на представление, запрашивайте конкретные столбцы непосредственно при создании коллекции 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();
     }
1 голос
/ 13 апреля 2011

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

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

B / c, если поле не было запрошено в SPQuery.ViewFields, вы, вероятно, не можете его получить (кроме исключений: поле Created, поле ID)

1 голос
/ 18 марта 2009

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

foreach (var item in list.Items) Console.WriteLine((string)item["Title"]);
0 голосов
/ 08 марта 2011

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

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

Решение вашей проблемы - просто заменить item.Title на item["LinkTitle"].ToString().

0 голосов
/ 29 декабря 2010

Не знаю почему, но я создал GridView из SPListItemCollection в качестве источника данных. У меня была такая же ошибка. Но я попытался получить 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();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...