(используя .Net 3.5)
У меня есть представление данных, которое связано со списком объектов и AllowUserToAddRows=True
, но у объектов нет пустых конструкторов. Я думаю, что из-за этого новый ряд сетки не появился. Затем я обработал событие источника привязки «AddingNew», чтобы программно вставить необходимые аргументы конструктора:
Private _Codes As BindingList(Of CodeSelector)
Private WithEvents _bs As New BindingSource
_Codes = New BindingList(Of CodeSelector)
_bs.DataSource = _Codes
_bs.AllowNew = True
Me.dgvGraphs.DataSource = _bs
Private Sub _bs_AddingNew(ByVal sender As Object, ByVal e As System.ComponentModel.AddingNewEventArgs) Handles _bs.AddingNew
e.NewObject = New CodeSelector({default contructor arg's here})
End Sub
Итак, теперь новая строка появляется в представлении данных. Однако первый столбец является столбцом кнопки, и нажатие на ячейку кнопки новой строки, по-видимому, не вызывает новую строку. Затем я попытался обработать щелчок ячейки и заставить источник привязки создать новую строку:
Private Sub dgvGraphs_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvGraphs.CellClick
Dim dgv = DirectCast(sender, DataGridView)
If e.ColumnIndex = ColEdit.Index AndAlso e.RowIndex = dgv.NewRowIndex Then
_bs.AddNew()
End If
End Sub
Но теперь сетка данных создает ДВЕ новые строки, когда пользователь нажимает кнопку ячейки! Понятия не имею почему. Как я могу заставить представление данных создать только одну новую строку (т.е. добавить связанный объект), когда пользователь нажимает на ячейку кнопки новой строки?
(Кстати, мне очень нравится функция AllowUserToAddRows в datagridview, так как отображение новой строки кажется мне более наглядным, чем нажатие кнопок «Добавить» и «Удалить» на форме и т. через эти проблемы)