验证自定义datagridviewCell上的单元格值

时间:2012-11-07 01:40:31

标签: c# .net winforms validation datagridview

我有DataGridView个自定义DataGridViewColumn。该列正在托管第三方组件。我在单元格中进入编辑模式并修改其值,然后按回车键以验证该值。问题是我必须按两次回车键才能验证该值。看起来第一个输入密钥是验证托管在单元格中的第三方编辑器中的值,第二个验证DataGridView的单元格...那么如何仅按下回车键来验证单元格的值一度?

此外,我也看到了奇怪的行为,例如,最后一个DataGridView的行与DataGridView的其余单元格的行为不同。对于最后一行,如果我编辑单元格的值然后按回车键进行验证,则在验证值后,它始终保持在同一单元格中并处于编辑模式,并且单元格的值被选中,以便用户可以认为单元格值无效事实上并非如此。其余行不会发生这种情况。他们需要按两次输入键进行验证,并且验证后单元格不会保持编辑模式。

修改: 关于需要按两次输入键: 在自定义单元格中,当第一次按下回车键时,它会引发表示单元格值已更改的事件,在这种情况下,OnSourceValueChanged(这是当值发生更改时为第三方引发的事件)所以我做到了:

        this.valueChanged = true;
        this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
        base.OnSourceValueChanged(e);

执行NotifyCurrentCellDirty时,会在datagridview上引发CurrentCellDirtyStateChanged,代码为:

            if (this.gridView.IsCurrentCellDirty)
        {
            this.gridView.CurrentCell.DataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);
            this.gridView.EndEdit(DataGridViewDataErrorContexts.Commit);
        }

之后,为datagridview引发了DataError事件,但是单元格继续处于编辑模式,所以我想提交值并退出编辑模式。这该怎么做?我也试过了:

this.dataGridView.CurrentCell.DataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);

this.dataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);

在DataError处理程序中,但它不起作用。

最后,cellvaluechanged没有被提升,因为它是单元格中的托管控件...我不明白为什么我必须按两次回车键提交并验证单元格上的更改并退出单元格的编辑模式。我只想按回车键一次。

可能原因是在CurrentCellDirtyStateChanged中提交后发生了错误。引发DataError事件报告提交错误。另外,如何避免提交错误?发生了什么事?

1 个答案:

答案 0 :(得分:0)

您可以在CellValueChanged事件中实现您的单元格验证逻辑。编辑单元格的值后将触发此事件。