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 を引き起こすもう 1 つの問題/機能は、新しい ListView しきい値です。アクセスしようとしているリストに項目が多すぎる場合、この例外が発生します。これを処理する方法は、リストの powershell を使用してしきい値を上げることです。

于 2012-06-08T08:47:28.527 に答える
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 に答える
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 に答える
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 に答える