Проверка флажка DevExpress XtraGrid не регистрируется, если фокус не изменяется - PullRequest
7 голосов
/ 11 марта 2011

У нас есть форма 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

Ответы [ 2 ]

10 голосов
/ 26 августа 2011

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

0 голосов
/ 26 октября 2015

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

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