2009-10-20 56 views
1

我有一个SPListItem,我有一个列名称的数组。 当我尝试使用以下代码来访问SPListItem值:SPList项目获取值 - ArgumentException

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 
} 

回答

0

SharePoint列表不存储作为与静态尺寸的阵列。

你必须使用内置在SharePoint迭代器要经过的每个元素

例如: 错误:

SPList checklist = //Some initiliaztion 

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

这会在你的SPlist

编辑做的每一项工作建议,直到编辑完成才看到代码。

也许试试看?

(String)item[colname] 
0

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

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(); 
    } 
} 
1

我有类似的情况与自定义级联字段(或列)。我遵循以下方法,似乎适用于自定义字段类型。

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

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

3

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

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

通常当你与场测试程序帐户中的代码将工作,用我们的一个ArgumentException普通用户。

导致ArgumentException的另一个问题/特征是新的ListView阈值。如果您尝试访问的东西太多,则会引发此异常。处理这个问题的一种方法是使用PowerShell为列表增加阈值。

+0

为什么需要我很长时间才能找到答案?为什么SharePoint不会给我一个更好的错误信息,比如,“嘿,你知道那个你想要获得的价值的领域?好吧,我在你正在访问的SPListItem中看到它,但它并不是真的在那里,因为你的SPQuery没有说要检索它,请继续并将该字段添加到您的SPQuery中,这样您就会变得非常好。“ – 2014-07-03 18:19:58