您好,我正在使用 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 属性都用于检索列表项。
不知道你的错误是否解决了。但我面临着同样的问题,并且找到了问题的解决方案。
你必须去:
管理中心 > 应用程序管理 > 管理 Web 应用程序
选择正在使用的 Web 应用程序并选择:
通过功能区“常规设置 > 资源限制”。
向下滚动并查找“
List View Lookup Threshold
”,默认值为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();
}
“标题”字段可能存在于列表中,但不存在于默认视图中。 你能做到吗?
foreach (var item in list.Items) Console.WriteLine((string)item["Title"]);
我建议类似的东西
if (item.Fields.ContainsField("Last_x0020_Modified"))
{
if (query.ViewFields.Contains("Last_x0020_Modified"))
...
B/c 如果 SPQuery.ViewFields 中没有请求该字段,您可能无法获取它(例外情况包括 Created 字段、ID 字段)
“标题”字段在默认视图中(默认情况下)不可用。如果您查看视图设置页面,标题已选中,但它被标记为“链接到带有编辑菜单的项目”。
视图暴露的字段实际上被命名为“LinkTitle”(您可以通过枚举
list.DefaultView.ViewFields
来确认这一点)。
问题的解决方案只需将
item.Title
替换为 item["LinkTitle"].ToString()
。
我不知道为什么,但我从 SPListItemCollection 创建了一个 GridView 作为数据源。我有同样的错误。但我尝试从集合中获取数据表:
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();
一切正常:)
如果您重命名已经存在的列,则可能会出现此问题。尝试删除它并创建一个具有相同名称的新的。
或者在我遇到的另一个例子中,我不小心用希腊语写了一个列名字母!例如。 “Is合作”我是一个希腊角色
我正在使用
CamlQuery
并根据某些代码值进行条件过滤以使用 <Eq>
或 <Contains>
子句。问题是,我的条件是设置 <true>
或 <false>
,它的计算不正确,因此它不是一个有效的比较运算符,它抛出了这样的错误。
解决方案当然是使用正确的运算符进行比较。