Я работаю с DataGridView в VB. net. Я использовал клавишу Enter как Tab, чтобы переместить столбец к следующей ячейке после редактирования, и когда фокус находится на последней ячейке, он переходит к первой ячейке следующей строки. все работает нормально, кроме этого ...
- Когда вы щелкаете мышью по последней ячейке последней строки мышью во время выполнения, выдает ошибку
({"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