【问题标题】:Datagridview adding two new rows at a timeDatagridview一次添加两个新行
【发布时间】:2011-12-22 18:25:06
【问题描述】:

(使用 .Net 3.5) 我有一个绑定到对象列表和AllowUserToAddRows=True 的datagridview,但对象没有空构造函数。我认为因为网格的新行没有出现。然后我处理了绑定源“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

所以现在新行出现在 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 decorator 与无参数构造函数一起使用。
  • 好吧,因为我已经通过处理绑定源“AddingNew”设法克服了非空构造函数问题,我认为这不是导致双行创建的原因。我在我的问题中包含了这个 sn-p 只是为了全面披露,以防它以某种不可预见的方式发生。
  • 我明白了,我试图建议一种方法,使您能够再次使用模板行。

标签: .net winforms data-binding datagridview


【解决方案1】:

在与 datagridview 进行了荒谬的斗争之后,我终于偶然发现了一个似乎可行的答案。这实际上是在论坛中提出的,但我丢失了链接。通过调用 bindingsource CancelEdit,您可以防止 datagridview 在幕后执行 AddNew。它仍然有一些怪癖,但通常没问题:

 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 Then
            If e.RowIndex = dgv.NewRowIndex Then
                _bs.AddNew()
                _bs.CancelEdit()
            E 
        End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    相关资源
    最近更新 更多