- Почему только для чтения?
Код выдает ошибку только для чтения, поскольку ссылка в сеансе ["Ключи"] указывает на gv_courses.DataKeys [index]. Значения, которые читаютсятолько.Весь DataKeyArray Datakeys доступен только для чтения, а также свойство Values каждого его элемента DataKey.Из того, что я читал в Интернете, это выбор дизайна .net, и, вероятно, он предназначен только для чтения, поэтому он синхронизируется с источником данных (если вы можете изменить DataKeyArray, ему придется распространяться на источник данных).
- Как установить мой ключ в сеансе, чтобы решить мою проблему?
Что вам нужно сделать, это сделать глубокую копию gv_courses.DataKeys [index] .Values, а затем сохранить эту новуюскопировать в сеансе ["ключи"].Например:
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
И теперь код будет выполняться, поскольку OrderedDictionary в сеансе больше не доступен только для чтения:
((IOrderedDictionary)Session["KeysCourse"])[2] = objToUpdate.Note_title;
((IOrderedDictionary)Session["KeysCourse"])[3] = objToUpdate.Iscourse;