我正在使用 VB.NET 并在我的表单中使用 datagridview。第一个动作是从 db 加载。在这种情况下,没有填充所有单元格。我还将活动单元格设置为第一个空单元格。然后我填写一个不允许的值
我在 CellEndEdit 上检查验证 --> msgbox "Wrong Value" --> set value = "" --> set begin edit 现在问题行光标甚至移动到下一行
我正在寻找一种解决方案,只要选择错误的单元格,直到值正确。
我正在使用 VB.NET 并在我的表单中使用 datagridview。第一个动作是从 db 加载。在这种情况下,没有填充所有单元格。我还将活动单元格设置为第一个空单元格。然后我填写一个不允许的值
我在 CellEndEdit 上检查验证 --> msgbox "Wrong Value" --> set value = "" --> set begin edit 现在问题行光标甚至移动到下一行
我正在寻找一种解决方案,只要选择错误的单元格,直到值正确。
好的,谢谢你的帮助。现在我有下一个问题。之后 CellValidatinr 将行光标移动到下一行。
但我必须将当前单元格设置为下一个空字段,例如 Form1_Load Here my short test Code
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim i As Int32 = 0
Dim emptyRow As Int32 = -1
With Me.DataGridView1
.Rows.Add(1, "E0", "E0")
.Rows.Add(1, "", "E0")
.Rows.Add(1, "E0", "E0")
.Rows.Add(1, "", "E0")
.Rows.Add(1, "E0", "E0")
.Rows.Add(1, "", "E0")
End With
For i = 0 To Me.DataGridView1.Rows.Count - 1
If Me.DataGridView1.Rows(i).Cells(1).FormattedValue.ToString = "" Then
emptyRow = i
Exit For
End If
Next
If emptyRow > -1 Then
Me.DataGridView1.CurrentCell = Me.DataGridView1(1, emptyRow)
End If
End Sub
Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
e.Cancel = (e.ColumnIndex = 1 AndAlso e.FormattedValue.ToString <> "E0")
If e.Cancel Then
Me.txtMsg.Text = "Ungülitger Barcode"
Me.DataGridView1.CancelEdit()
End If
End Sub
End Class
我可以使用哪个事件将 CurrentCell 设置为下一个空 Cells(1)
如果您想阻止用户在设置了错误值的情况下离开当前单元格,请e.Cancel = True在 CellValidating 事件上进行设置。例如,如果用户没有输入数字,则此代码会阻止用户将单元格留在第二列:
Private Sub dataGridView1_CellValidating(sender as Object, e as DataGridViewCellValidatingEventArgs e) Handles dataGridView1.CellValidating
'set cancel to true if colindex is 1 and TryParse returned false (not a number)
e.Cancel = (e.ColumnIndex = 1 AndAlso Not Int32.TryParse(e.FormattedValue.ToString(), Nothing)
End Sub
要清除输入编辑器,您必须意识到您没有编辑单元格,您正在输入一个文本框,该文本框正在绘制在单元格所在位置的顶部。从概念上讲,任何时候每个 datagridview 都只有一个编辑器文本框(并将其放在与当前单元格相关的任何位置)。因此,为当前单元格编辑值的控件与单元格无关,而是网格本身的一个功能,并且可以通过dataGridView1.EditingControl. 这将返回一个控件;它可以是编辑单元格的任何类型的表单控件(文本框、复选框、日期选择器等),因此 EditingControl 返回控件的基类类型。控件有一个.Text属性和一个.ResetText()方法,因此我们可以清除文本框而无需强制转换(但如果我们使用日期选择器等,它可能需要在访问其值之前进行强制转换)。这可以重置文本框:
Private Sub dataGridView1_CellValidating(sender as Object, e as DataGridViewCellValidatingEventArgs e) Handles dataGridView1.CellValidating
If e.ColumnIndex = 1 AndAlso Not Int32.TryParse(e.FormattedValue.ToString(), Nothing) Then
e.Cancel = true
dataGridView.EditingControl.ResetText()
End If
End Sub