2009-10-20 54 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