(使用.net 3.5) 我有一個datagridview綁定到對象列表和AllowUserToAddRows=True
,但對象沒有空的構造函數。我想這是因爲電網的新排沒有出現。於是我處理的綁定源「AddingNew」事件以編程方式插入必要的構造器參數:Datagridview一次添加兩個新行
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
所以,現在的新行出現在DataGridView。但是,第一列碰巧是一個按鈕列,並且單擊新行按鈕單元顯然不會觸發新行。於是我試着處理單元點擊強制約束力源來創建一個新的行:
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
但現在的DataGridView創建兩個新行,當用戶點擊該按鈕電池!我不知道爲什麼。當用戶點擊新行的按鈕單元格時,如何才能讓datagridview只創建一個新行(即添加綁定的對象)?我真的很喜歡datagridview的AllowUserToAddRows功能,因爲顯示一個新行似乎比在屏幕上顯示「添加」&「刪除」按鈕更具視覺優雅,這就是爲什麼我想要通過這些問題的力量)
您也可以考慮使用'CodeSelector' [裝飾](http://www.dofactory.com/Patterns/PatternDecorator.aspx)與參數的構造函數。 –
好吧,因爲我設法通過處理bindingsource「AddingNew」來解決非空構造問題,所以我不認爲這是造成雙行創建的原因。我在我的問題中包含了這個片段,只是爲了全面披露,以防止它以某種無法預料的方式發揮作用。 – Tekito
我明白了,我試着建議一種讓你再次使用模板行的方法。 –