Здравствуйте, 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.
Возможно, тут проблема и во вьюхе, но ведь и грид, получается, чего-то недодал (ведь и у самого грида итоговая сумма не обновилась еще)?