【问题标题】:RowLeave event called when DataGridView loadsDataGridView 加载时调用的 RowLeave 事件
【发布时间】:2015-07-07 17:06:03
【问题描述】:

我正在使用 datagridview 将 Access 数据库填充到 VB.net 中的表单。当用户连续更改值时,我想执行某些操作(验证/更新数据库)。我想等到该行失去焦点来执行更改。我正在使用 RowLeave 事件来执行任务。问题是当带有 datagridview 的表单加载时,它会自动运行 RowLeave 事件。

如何加载表单而不运行 RowLeave 事件?是什么导致在加载表单时触发 RowLeave 事件?

编辑:这是我的代码的一部分:

Public Sub loadGradeForm(ByRef temp As Teacher)
    currTeacher = temp
    Me.showGrades() 'Populating the datagridview (GradeGridView)
    Me.Show()
    'After the form loads, it automatically goes to RowLeave when I go through debugging
End Sub

Private Sub showGrades()
    GradeGridView.DataSource = Nothing
    GradeGridView.Rows.Clear()
    GradeGridView.Columns.Clear()

    GradeGridView.AutoGenerateColumns = False
    GradeGridView.AutoSize = True

    GradeGridView.DataSource = currTeacher.ListOfClasses()

    Dim column0 As DataGridViewColumn = New DataGridViewTextBoxColumn()
    column0.DataPropertyName = "Class"
    column0.Name = "Class"
    GradeGridView.Columns.Add(column0)
    Dim column As DataGridViewColumn = New DataGridViewTextBoxColumn()
    column.DataPropertyName = "Grade"
    column.Name = "Grade"
    GradeGridView.Columns.Add(column)
    Dim column1 As DataGridViewColumn = New DataGridViewTextBoxColumn()
    column1.DataPropertyName = "Semester"
    column1.Name = "Semester"
    GradeGridView.Columns.Add(column1)

End Sub

Private Sub GradeGridView_RowLeave(sender As Object, e As DataGridViewCellEventArgs) Handles GradeGridView.RowLeave
    MsgBox(e.RowIndex)
    'This is just a test to see if RowLeave is triggered        
End Sub

【问题讨论】:

    标签: vb.net datagridview row


    【解决方案1】:

    当您的 DataGridView 填充了行时,如果 DataGridView 失去焦点,这些行肯定会以编程方式保留。

    为避免在表单将行加载到 DataGridView 时触发代码,我可以想到两种解决方案:

    1. 仅当Me.IsLoadedTrue 时,才执行GradeGridView_RowLeave() 方法中的逻辑。
    2. 数据初始加载后添加您的 EventHandler,方法是删除 GradeGridView_RowLeave(sender As Object, e As DataGridViewCellEventArgs)Handles GradeGridView.RowLeave 并将 AddHandler GradeGridView.RowLeave, AddressOf GradeGridView_RowLeave 行添加到您的底部showGrades()-方法。

    当然,上述解决方案只有在程序开始时仅加载一次数据时才有效。如果您需要再次加载数据,例如如果用户单击 Update-Button,我建议在您的类中添加一个 LoadingMode-boolean 标志,在加载之前将其设置为 true发生,加载完成时为假。在执行GradeGridView_RowLeave() 的逻辑之前,可以像Me.IsLoaded 一样检查这个布尔变量。

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 2010-11-13
      相关资源
      最近更新 更多