1

我有一个SPListItem并且我有一个列名数组。当我尝试SPListItem使用以下代码访问值时:

for(int i=0;i<arrColName.length;i++)
{
    string tempValue =  item[arrColName[i]].ToString();
    // Works fine in case the the specific column in the list item is not null
    // Argument exception - Values does not fall witing expected range
    // exception in case the value //is null
}
4

5 回答 5

3

我认为您使用 SPQuery 来获取列表项并忘记将字段添加到 SPQuery 的 viewfields 属性中。

query.ViewFields = string.Format("<FieldRef Name=\"{0}\" Nullable=\"True\" />", mFieldName);

通常,当您使用农场帐户测试您的程序时,代码会正常工作,而对于普通用户,您会收到 ArgumentException。

另一个导致 ArgumentException 的问题/功能是新的 ListView 阈值。如果您尝试访问的列表中有太多项目,则会引发此异常。解决此问题的一种方法是使用 powershell 增加列表的阈值。

于 2012-06-08T08:47:28.527 回答
1

我对自定义级联字段(或列)也有类似的情况。我按照以下方式进行操作,它似乎适用于自定义字段类型。

item.Properties["Country"] = "Mexico"; // custom field
item.Properties["nCity"] = "Cancun"; // custom field
item["Document Descriptions"] = "Test document description.";

注意:我item.Properties为自定义列添加了。无需为内置字段类型添加属性(否则它们不起作用)。

于 2010-09-07T04:47:43.490 回答
1

不仅要检查 item != null 还要检查 item["FieldName"] != null。因为如果你尝试在 null 上调用 .ToString() ,你会得到异常。

如果内部名称为“FieldName”的字段不存在,您也会收到异常。所以你可能会尝试

SPFieldCollection fields = list.Fields;
foreach (SPListItem item in list.Items) {
  if (fields.Contains("FieldName") && item["FieldName"] != null) {
    string fieldValue = item["FieldName"].ToString();  
  }
}
于 2009-10-21T06:04:22.790 回答
0

Sharepoint 列表不存储为具有静态大小的数组。

您必须使用内置的 sharepoint 迭代器来遍历每个元素

例如:

SPList checklist = //Some initiliaztion

foreach (SPListItem item in checklist.Items){
     //work
}

这将对您的 SPlist 中的每个项目起作用

编辑:错误的建议,直到编辑后我才看到代码。

也许尝试演员?

(String)item[colname]
于 2009-10-20T17:26:55.517 回答
0

您的数组是否包含列的内部名称或显示名称?如果是后者,你可以试试item[item.Fields[arrColName[i]].InternalName].ToStrinng();

于 2009-10-20T23:21:33.053 回答