Session["Keys"] の参照が読み取り専用の gv_courses.DataKeys[index].Values を指しているため、コードは読み取り専用エラーを返します。DataKeyArray Datakeys 全体が読み取り専用であり、それぞれの DataKey 要素の Values プロパティも含まれます。私がインターネットで読んだことから、これは.net設計の選択であり、おそらく読み取り専用であるため、データソースとの同期が維持されます(DataKeyArrayを変更できる場合は、データソースに伝播する必要があります)。
- セッションでキーを設定して問題を解決するにはどうすればよいですか?
あなたがする必要があるのは、gv_courses.DataKeys[index].Values のディープ コピーを作成し、その新しいコピーを Session["keys"] に保存することです。例えば:
IOrderedDictionary keys = gv_courses.DataKeys[index].Values;
var keysTemp = new OrderedDictionary();
foreach (DictionaryEntry de in keys)
{
keysTemp.Add(de.Key, de.Value);
}
キー OrderedDictionary は gv_courses.DataKeys[index].Values と同じですが、読み取り専用ではありません。これで、セッションに保存できます。
Session["KeysCourse"] = keysTemp; //keysTemp is equal to keys but is editable
そして、Session の OrderedDictionary が読み取り専用ではなくなったため、コードが実行されます。
((IOrderedDictionary)Session["KeysCourse"])[2] = objToUpdate.Note_title;
((IOrderedDictionary)Session["KeysCourse"])[3] = objToUpdate.Iscourse;