Используя пошаговое руководство из [[http://msdn.microsoft.com/de-de/library/15a31akc.aspx]],], я реализовал DatagridView
в виртуальном режиме, полностью свободном, в VB 10 Express (мы говорим о WinForms).
Я понимаю, что CommitEdit (DataGridViewDataErrorContexts.Commit)
передает содержимое текущей ячейки в кеш данных.
В примере используется фиксация на уровне строк, т.е. он помещает значения в буфер строк до тех пор, пока не останется текущая строка. Только тогда строка добавляется (или обновляется) в хранилище данных. Это именно то, что я делаю тоже.
Вопрос - как программно зафиксировать текущую строку, не покидая ее? (Я хочу зафиксировать всю строку, а не только текущую ячейку.)
Если пользователь покидает строку, существует последовательность событий RowValidating
, RowValidated
, RowEnter
, в которой выполняется обновление хранилища данных. Поэтому одна идея (в настоящее время моя единственная) состояла в том, чтобы просто переустановить, например, CurrentCell
в Nothing
.
Но я не могу просто установить для свойства DataGridView
CurrentCell
значение Nothing
(или любую ячейку за пределами текущей строки), поскольку я хочу зафиксировать в обработчике события пользовательский элемент управления редактирования, созданный пользовательский столбец, и я вижу исключение System.InvalidOperationException
при установке CurrentCell
там.
Фактически, это крошечная кнопка справа от поля со списком, то есть я создаю потомка DataGridViewComboBoxCell
, который является элементом управления DataGridViewComboBoxColumn
потомка. Моя специальная ячейка ComboBox добавляет крошечную кнопку, которая должна зафиксировать текущую строку. К сожалению, обработчик события _Click
этой кнопки не может изменить CurrentCell
, поскольку DetachEditingControl
вызывает исключение.
Очевидно, я должен отложить переназначение CurrentCell
, пока не будет обработано все событие _Click
. Или что? Как мне это сделать - зарегистрировать пользовательское сообщение Windows SendMessage
, которое мне было бы нужно, и переопределить процедуру окна формы, чтобы оно сбрасывало CurrentCell
при получении этого сообщения? (Привет?)
Должен быть довольно простой способ позволить DataGridView
зафиксировать все изменения, запустив события, которые я обрабатываю для обновления хранилища данных, не так ли?
Надеюсь, понятно, о чем я говорю. У меня пока нет примера компактного кода: (