2010-10-31 2 views
1

Рассмотрим 2 DataGridViews как с SelectionMode = RowHeaderSelect. В grid1 у меня есть 2 столбца; TextBox и CheckBox. В grid2 у меня есть 2 столбца; ComboBox и TextBox.DataGridView UserDeletingRow Not Firing

Когда я нажимаю на RowHeader, фокус переходит к первой ячейке, а не к RowHeaderCell. Когда я нажимаю кнопку DEL, содержимое ячейки удаляется (содержимое TextBox очищается, а ComboBox устанавливается на 1-й элемент).

Таким образом, событие UserDeletingRow никогда не срабатывает, так как в FAQ DataGridView говорится: «Пользователи могут удалять строки только тогда, когда текущая ячейка не находится в режиме редактирования, для свойства AllowUserToDeleteRows установлено значение true».

В качестве обходного пути я реализовал этот код в RowHeaderMouseClick

grid.CurrentCell = grid.Rows[rowIndex].Cells[columnName]; 
grid.Rows[rowIndex].Selected = true; 

В случае СЕТКА1 я передать имя столбца CheckBox и костров событий UserDeletingRow при нажатии DEL. Однако для передачи grid2 имя столбца ComboBox не запускает событие.

Я пробовал следующее:
1- Выбрать RowHeaderCell -> Исключение, потому что оно не может быть выбрано.
2- grid.EndEdit() -> Без эффекта.
3- Измените SelectionMode на FullRowSelect, затем на RowHeaderSelect -> Cell настроен на режим редактирования.

Мой вопрос:
Мне нужно, чтобы UserDeletingRow срабатывал независимо от столбца сетки? Или обходной путь для выбора HeaderCell, если это возможно?

Редактировать (Краткая форма вопроса):
Нажатие RowHeader выбирает строку и помещает первую ячейку в режиме редактирования, если это применимо, таким образом, нажав на кнопку DEL удаляет содержимое ячейки и не срабатывает событие UserDeletingRow. В качестве обходного пути я выбираю ячейку, если она доступна, которая не может быть переведена в режим редактирования, например. CheckBoxColumn.

Это поведение по умолчанию при нажатии на RowHeader? Если да, можете ли вы показать мне обходной путь? Если нет, вы можете указать мне причину такого поведения?

Edit 2:
Я обнаружил, что установка в режим редактирования EditOnEnter делает щелкая RowHeader поставить первую ячейку в режиме редактирования. Я постараюсь это преодолеть, но любая помощь приветствуется.

ответ

1

Я нашел ответ в http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/cab3c9eb-4c86-475e-8cbd-dee6b235765a. Обходным путем является изменение EditMode в режиме, отличном от EditOnEnter, при нажатии на RowHeader, а затем его изменение обратно в EditOnEnter.

Я хочу поблагодарить @ M2X, потому что его комментарий был полезен.

+0

Рад, что вы поняли это и я мог бы помочь; – M2X

2

Жаль, что я не могу оставить комментарий еще (из-за репутации и так далее!) Также вы не поняли, что именно вы хотите сделать.

Нажатие кнопки RowHeader строки приводит к выбору выбранной строки и нажатии кнопки Del, строка удаляется, и событие запускается!

Если вы хотите удалить строку без выбора заголовка строки, подумайте об использовании «Full Row Select» вместо «Row Header Select».

+0

Щелчок по RowHeader выбирает всю строку, но помещает первую ячейку в режим редактирования. Поэтому нажатие DEL удаляет содержимое ячейки и не запускает событие UserDeletingRow. –

+1

Ну, я пробовал это прямо сейчас. Он не помещал мою первую ячейку в режим редактирования, и я мог бы легко удалить эту строку. интересно, есть ли свойство для такого поведения, о котором вы упоминаете ... – M2X

+0

, когда EditMode установлен в EditOnEnter, щелкнув RowHeader, ставится первая ячейка в редакторе. Вот почему DEL не запускает событие UserDeletingRow. –