C# SharePoint ListItem错误:";值不在预期范围内;

C# SharePoint ListItem错误:";值不在预期范围内;,c#,sharepoint,sharepoint-2007,C#,Sharepoint,Sharepoint 2007,您好,我正在使用SharePoint命名空间进行开发,在尝试从列表项检索标题字段时遇到以下错误 值不在预期范围内 但是,我知道该字段存在,因为我打印了所有字段 string value = (string)listItem[listItem.Fields["Title"].Id]; Console.WriteLine("Title = " + value); 更新:用于检索列表项的视图在多大程度上在哪些字段可用中发挥作用?此代码失败,但出现相同的异常: SPListItemCollection

您好,我正在使用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属性都用于检索列表项。

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

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

我不知道为什么,但我从SPListItemCollection创建了一个GridView作为数据源。我也犯了同样的错误。但我试图从集合中获取数据表:

SPListItemCollection res = da.getAllItems();
DataTable dt = res.GetDataTable();
然后我在GridView中看到,包含列表项标题的字段称为“LinkTitle”。所以,我重写了我的代码: SPListItemCollection res=da.getAllItems()

gridView.DataSource=res.Cast().Select(a=>a[“LinkTitle]”);
gridView.DataBind();
一切正常:)

默认情况下,“标题”字段在默认视图中不可用。如果查看“查看设置”页面,则会选中标题,但其标签为“链接到具有编辑菜单的项目”

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


您的问题的解决方案只是将
item.Title
替换为
item[“LinkTitle”]。ToString()
我建议如下

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

B/c如果在SPQuery.ViewFields中未请求该字段,则可能无法获取该字段(例外情况包括已创建字段、ID字段)

我不知道您的错误是否已解决。但我也面临同样的问题,我找到了解决问题的办法

您必须转到:
中央管理>应用程序管理>管理Web应用程序
选择正在使用的Web应用程序并选择:
通过功能区“常规设置>资源限制”

在这种情况下,向下滚动并查找“
列表视图查找阈值”
,默认值为
8
增加该值,直到错误消失


我有这个问题,因为该列不是默认视图的一部分。创建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();
     }

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


或者在我想到的另一个例子中,我不小心用希腊语写了一封列名的信!例如,“cii sCooperation”是一个希腊字符

任何引用项[“Title”]的尝试都会引发该异常。我面临同样的问题,我也遇到过这个问题。我已经验证了我的字段名是正确的。此外,微软似乎已将默认值从8更改为12。在我的开发环境中有12个,但在出现问题的登台环境中有8个。我必须在IIS中重置应用程序池,设置更改才能生效。
  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();
     }