Флажок DevExpress XtraGrid не зарегистрирован, если фокус не изменится

У нас есть привязка к базе данных XtraGrid в нашей форме Windows. Один из столбцов - это флажок. Проблема заключается в следующем: когда пользователи устанавливают флажок и нажимают кнопку «ОК», флажок, если он явно установлен, не считается установленным сеткой. Когда я это делаю (проходя по строкам):

isAllowed = Convert.ToBoolean(viewMain.GetRowCellValue(nRowCtr, "IsAllowed"))

Я возвращаюсь ложно. НО, если пользователь устанавливает флажок, а затем щелкает где-нибудь еще в форме или в другой строке в этой сетке, тем самым убирая фокус с отмеченного флажка, тот же код выше вернет True.

Мы будем очень благодарны за любое понимание того, как исправить это поведение.

Обходной путь найден. При настройках по умолчанию, когда пользователи нажимают на ячейку для ее редактирования, ячейка переходит в режим редактирования, загружает элемент управления редактором (в данном случае у меня элемент управления репозиторием CheckEdit) и изменяет значение элемента управления. (в данном случае проверяемое состояние). Если я нажимаю на другую строку или другой элемент управления, ячейка выходит из режима редактирования, фиксируя изменение элемента данных. Но если я нажму кнопку, мои изменения будут потеряны. Обходной путь - использовать событие CheckEdit CheckedChanged для закрытия редактора:

Private Sub edCheck_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles edCheck.CheckedChanged
        gridYears.FocusedView.CloseEditor()
End Sub

person Alex Polkhovsky    schedule 11.03.2011    source источник


Ответы (2)


На самом деле есть более чистый способ сделать это (он работает для всех RepositoryItems), подробно описанный в Сайт DevExpress. Идея состоит в том, чтобы вызвать метод GridView.PostEditor из обработчика событий EditValueChanged элемента репозитория, чтобы немедленно сохранить отредактированное значение в ячейке сетки и соответствующем столбце.

person sallen    schedule 26.08.2011

Этот код в обработчике событий CellValueChanging представления решил проблему:

private void OnCellValueChanging(object sender, CellValueChangedEventArgs e)
{
    _gridView.SetFocusedRowCellValue(_gridView.FocusedColumn, e.Value);
}
person Alex    schedule 26.10.2015