【问题标题】:Validating DataGridView Cells验证 DataGridView 单元格
【发布时间】:2016-10-10 07:13:11
【问题描述】:

目前我的表单上有一个 datagridview。我正在尝试做的想法是在用户编辑 datagridview 中的单元格时捕获可能的双重输入问题。我应该检查该字段是否有重复值(CheckContestantList 已经通过循环遍历每一行和一个可能的匹配项来完成)。在匹配时,应该恢复以前的值,并且在将该字段重置为编辑模式时应该弹出一个消息框并警告用户。

但是,当用户按下 Enter 键时...当前行指示器会向下移动一个...并抛出所有内容。我已经对此事进行了一些阅读,但即使有人按 Enter,我似乎也无法保持当前单元格处于活动状态。

如何让回车键仍然确认回车但不向下移动一行?

Private Sub dgvContestantPool_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles dgvContestantPool.CellEndEdit
    ' On the editing of the field, check to see if the value already exists.

    If CheckContestantList(dgvContestantPool.CurrentCell.Value) = True Then

        ' Reset the value to the original value...
        dgvContestantPool.ClearSelection()
        dgvContestantPool.CurrentCell = dgvContestantPool.Rows(intCurrentRow).Cells("ContestantName")
        dgvContestantPool.Rows(intCurrentRow).Selected = True

        dgvContestantPool.CurrentCell.Value = strOldValue
        dgvContestantPool.BeginEdit(True)

        ' Alert the user to try again...
        MessageBox.Show("Entered value already exists in the list, try again or delete the entry.", "INVALID DATA - Already Exists", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Else
        ' Go ahead and let the edit persists.
    End If

End Sub

Private Sub dgvContestantPool_CellBeginEdit(sender As Object, e As DataGridViewCellCancelEventArgs) Handles dgvContestantPool.CellBeginEdit
    strOldValue = dgvContestantPool.CurrentCell.Value
    intCurrentRow = dgvContestantPool.CurrentRow.Index

End Sub

【问题讨论】:

    标签: vb.net datagridview


    【解决方案1】:

    您使用了错误的datagridview 事件,如果您要验证输入,您可以使用_CellValidating 事件。

    这是一个例子:

     Private Sub dgvContestantPool_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgvContestantPool.CellValidating
        If CheckContestantList(dgvContestantPool.Rows(e.RowIndex).Cells(e.ColumnIndex).EditedFormattedValue) = True Then
            'Your code goes here
        End If
     ...
    

    现在,例如单元格值无效,您可以调用 e.Cancel = Truecell_validating 事件中,以便用户无法转到其他单元格,除非单元格值有效或按ESC 键。这将退出单元格并返回到其先前/原始值。

    【讨论】:

    • 只需进行一项更改,以便 If 条件仅检查“脏”单元格,但这一切都有效!谢谢。
    • 很高兴这对您有所帮助。编码愉快。
    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多