如何检查datagridview单元格内容值是否手动输入/修改

时间:2017-04-24 11:45:35

标签: c# .net winforms events datagridview

在datagridview中,当我编辑单元格的内容并进行一些更改时,我想验证我键入的每个字符。 我很困惑,哪个事件适合这个。我尝试了cellvaluechanged事件。但它只发生在 第一次单击单元格时。但我希望每次在单元格内输入时都要验证。请告诉我 我哪个活动适合这个。

我尝试了什么:

private void dataGridView1_CellValueChanged(object sender, 
DataGridViewCellEventArgs e){
if(dataGridView1.Columns[e.ColumnIndex].Name == "Reference")
{
//My code goes here
 }
}

1 个答案:

答案 0 :(得分:0)

我确实发现DGV中的事件难以调试,因为它们并不总是在您期望它们时触发。有时它们会在将值输入单元格之前或之后触发,并且在您的示例中仅发生一次。

我解决这个问题的方法是操纵下面的事件_CurrentCellDirtyState():

Private Sub datagridview1_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) _
    Handles datagridview1.CurrentCellDirtyStateChanged
    if datagridview1.IsCurrentCellDirty
        datagridview1.CommitEdit(DataGridViewDataErrorContexts.Commit)
    End If
End Sub

这会使一个脏的细胞(按下按键)。您现在可以在每个输入上捕获事件_CellValueChanged()中的更改。下面的示例在更改的单元格值上启用了保存按钮。

Private Sub datagridview1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) _
    Handles datagridview1.CellValueChanged
    btnSave.Enabled = true
End Sub

但是,如果您想要执行验证,我建议您按照以下链接中的示例进行操作。

Make a specific column only accept numeric value in datagridview in Keypress event

您可以在_KeyPress()事件中构建自己的验证。我已经将这两种方法一起用于大多数数据网格视图。