SharePoint ListItem错误:“值不在预期范围内”

时间:2009-03-18 07:27:14

标签: c# sharepoint sharepoint-2007

您好我正在使用SharePoint命名空间进行开发,当我尝试从列表项中检索标题字段时遇到以下错误。

  

价值不在预期范围内

我知道该字段存在是因为我打印了所有字段。

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

更新:用于检索列表项的View在多大程度上可以在哪些字段中使用?此代码失败并出现相同的异常:

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属性都用于检索列表项。

7 个答案:

答案 0 :(得分:5)

我不知道你的错误是否已经解决。但我遇到了同样的问题,我找到了问题的解决方案。

你必须去:
 中央行政>应用程序管理>管理Web应用程序
选择正在使用的Web应用程序并选择:
“一般设置>资源限制“通过功能区。

在向下滚动并查找“List View Lookup Threshold”时,默认值为8会增加该值,直到错误消失。

Reference Link

答案 1 :(得分:1)

“标题”字段可能存在于列表中,但不存在于默认视图中。 你能做到吗?

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

答案 2 :(得分:1)

我建议像

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

B / c如果在SPQuery.ViewFields中没有请求该字段,你可能无法得到它(例外包括Created字段,ID字段)

答案 3 :(得分: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();
     }

答案 4 :(得分:0)

我不知道为什么,但我从SPListItemCollection创建了一个GridView作为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();

一切正常:)

答案 5 :(得分:0)

“标题”字段在默认视图中不是(默认情况下)。如果您查看了视图设置页面,则会选中“标题”,但会将其标记为“链接到带有编辑菜单的项目”。

视图公开的字段实际上名为“LinkTitle”(您可以通过枚举list.DefaultView.ViewFields来确认。)

问题的解决方案只是将item.Title替换为item["LinkTitle"].ToString()

答案 6 :(得分:0)

如果重命名已经存在的列,则可能会发生此问题。尝试删除它并创建一个同名的新对象。