该代码给出了只读错误,因为 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;