Re: XtraGrid не сохраняет данные
От: vprogrammer  
Дата: 23.01.08 22:42
Оценка:
Здравствуйте, vprogrammer, Вы писали:

V>Используется DevExpress XtraGrid. В датасорс прописана таблица. Проблема следующая — измененные в гриде данные не попадают в таблицу до тех пор, пока в гриде не сменить фокус на другую строку. Перевод фокуса на др. ячейку этой же строки ничего не даёт.

V>Как заставить грид писать данные в таблицу сразу после обновления значения в ячейке? В Infragistics было свойство, в котором можно было задать момент обновления строки — по потере фокуса строкой или ячейкой, есть ли здесь нечто подобное?

Дополню:
Дома эту ситуацию полность повторить не получается (тот же проект нет возможности запустить). Сделал пробную форму с гридом, повесил обработчик на смену значения в 2-х колонках для вычисления и записи суммы в 3й колонку.
— Эффекта нет.

Добавил отображение итоговой суммы по 3й колонке.
— Вот тут эффект частично проявился — итоговая сумма не обновляется, пока фокус у редактируемой строки.
Дополнил обработчик отображением значения 3й колонки в текстбоксе:
        private void grd_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if (e.Column.FieldName == "Price" || e.Column.FieldName == "ID")
            {
                decimal pr = (decimal)grd.GetFocusedRowCellValue("Price");
                int id = (int)grd.GetFocusedRowCellValue("ID");
                grd.SetFocusedRowCellValue(grd.Columns["Amount"], id * pr);

                DataView dv = new DataView(dt, string.Format("ID = {0}", id), "", DataViewRowState.CurrentRows);
                // отображаем значение колонки с суммой
                txtAmount.EditValue = (dv.Count == 0) ? null : dv[0]["Amount"];
            }
        }

и получил свои грабли — вьюха не находит строк, если я меняю значение поля "ID". При смене значения в поле "Price" в текстбоксе честно отображается полученная сумма. Стоит сменить "ID" — в текстбоксе null.

Возможно, тут проблема и во вьюхе, но ведь и грид, получается, чего-то недодал (ведь и у самого грида итоговая сумма не обновилась еще)?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.