Поставлена тривиальная задача: отобразить список вопросов в виде таблицы с возможностью изменения позиции вопроса. Единственное требование использование GridView + Linq. Итак имеем: таблица со структурой ID (Pimary Key), Text, Position; GridView и LinqDataSource. В GridView создаем поля: BoundField к Position, BoundField к Text и два ButtonField с командами MoveUp и MoveDown. В обработчике OnRowCommand имеем такой код:
...
if (e.CommandName == "MoveUp")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = gridView.Rows[index];
byte currentPostion = Convert.ToByte(row.Cells[0].Text);
if (currentPostion > 1)
{
DataContext db = new DataContext();
Question qPrev = (from q in db.Questions where q.Position == (currentPostion-1) select q).FirstOrDefault();
Question qNew = (from q in db.Questions where q.Position == currentPostion select q).FirstOrDefault();
qNew.OrdinalPosition = (byte)(currentPostion - 1);
qPrev.OrdinalPosition = currentPostion;
db.SubmitChanges();
gridView.DataBind();
}
}
...
Для команды MoveDown код аналогичный. Таблица заполнена правильно, т.е. у всех записей позиция отличается на 1, и минимальная позиция равна 1. В Опере и ФФ это все работает отлично, но в ИЕ8 (как в принципе и в ИЕ7) все время получаю ошибки
либо на строке
"Question qPrev = (from q in db.Questions where q.Position == (currentPostion-1) select q).FirstOrDefault();" получаю ошибку, что запись не найдена, либо на строке "db.SubmitChanges();" ошибку "Row not found or changed.". Хотя я уверен, что эти записи есть 100%. Вот и возник вопрос почему в Опере и ФФ это работет безотказно, а в ИЕ не хочет? И как это побороть?
Социальные закладки