DataGridView MouseClick выдает исключение - PullRequest
0 голосов
/ 01 мая 2020

Я работаю с DataGridView в VB. net. Я использовал клавишу Enter как Tab, чтобы переместить столбец к следующей ячейке после редактирования, и когда фокус находится на последней ячейке, он переходит к первой ячейке следующей строки. все работает нормально, кроме этого ...

  1. Когда вы щелкаете мышью по последней ячейке последней строки мышью во время выполнения, выдает ошибку ({"Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function."})

Вот мой код .

Imports System.Data.SqlClient

Public Class Form4
    Dim SQLMain As New SQLControlMain

#Region "Enter working in Datagrid"

    Private Sub datagridview1_keydown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown
        If e.KeyCode = Keys.Enter Then
            e.SuppressKeyPress = True
            Dim icol = DataGridView1.CurrentCell.ColumnIndex
            Dim irow = DataGridView1.CurrentCell.RowIndex
            If icol = DataGridView1.Columns.Count - 1 Then
                If irow < DataGridView1.Rows.Count - 1 Then
                    DataGridView1.CurrentCell = DataGridView1(0, irow + 1)
                End If
            Else
                DataGridView1.CurrentCell = DataGridView1(icol + 1, irow)
            End If
        End If
    End Sub

    Private Sub datagridview1_cellendedit(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
        Dim icol = DataGridView1.CurrentCell.ColumnIndex
        Dim irow = DataGridView1.CurrentCell.RowIndex
        If icol = DataGridView1.Columns.Count - 1 Then
            If irow < DataGridView1.Rows.Count - 1 Then
                DataGridView1.CurrentCell = DataGridView1(0, irow + 1)
            End If
        Else
            If irow < DataGridView1.Rows.Count - 1 Then
                SendKeys.Send("{up}")
            End If
            DataGridView1.CurrentCell = DataGridView1(icol + 1, irow)
        End If
    End Sub

#End Region

#Region "Multi Grid Condition"

    Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
        For Each row As DataGridViewRow In DataGridView1.Rows
            If row.Cells("Product_Code").Value <> "" And row.Cells("Product_Name").Value() <> "" And row.Cells("Quantity").Value() <> "" And row.Cells("Amount").Value() <> "" Then
                'Row is able to save in sql table
                row.Cells(7).Value = 1
                row.Cells(7).Style.BackColor = Color.LightGreen

            End If
        Next
        DataGridView1.Rows(e.RowIndex).HeaderCell.Value = CStr(e.RowIndex + 1)
    End Sub

#End Region

#Region "Form Load"

    Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        With DataGridView1
            .RowHeadersVisible = True
            .Font = New Font("Verdana", 9.5, FontStyle.Bold)
            .ColumnHeadersDefaultCellStyle.Font = New Font("Verdana", 10, FontStyle.Bold)
            .RowCount = 10
        End With
    End Sub

#End Region

End Class

DGV

...