【问题标题】:How to force DataGridView cell validation before closing form?如何在关闭表单之前强制 DataGridView 单元格验证?
【发布时间】:2019-02-21 14:50:14
【问题描述】:

我有一个可以编辑的DataGridView。编辑后,当我单击 Enter 或选择另一个单元格时,CellValueChanged 事件发生,我保存了这个新值。

我的问题:如果我更改单元格值并关闭表单而不单击 Enter 或之前选择另一个单元格,则不会保存最后一个值。

有办法解决吗?

【问题讨论】:

  • 你的数据源是什么?例如对于一个数据集stackoverflow.com/a/38797309/3110834
  • @RezaAghaei 我认为它有效,但如何在关闭前激活CellValueChangedCellValidating 事件?
  • @RezaAghaei 嗯,对不起,它工作得很好! (dataGridView.EndEdit();) 谢谢 :)
  • DataGridView.EndEdit 不会引发您在 CellValidating 中的验证。

标签: c# winforms datagridview


【解决方案1】:

假设您有一个DataTable 作为DataSourceDataGridView,然后使用以下代码验证并结束编辑:

this.Validate();
dataGridView1.BindingContext[yourDatTable].EndCurrentEdit();

【讨论】:

    【解决方案2】:

    首先检查“CellValueChanged”事件的工作原理。我认为在您关闭表单时不会触发事件。我要做的是当您关闭表单时,触发事件“FormClosing”并调用一个方法(“SaveThisNewValue()”)来保存您的值。 “cellValueChanged”事件中也使用了保存值的方法

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            SaveThisNewValue();
        }
    
        private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            SaveThisNewValue();
        }
    
        private void SaveThisNewValue()
        {
            //saves the cell value
        }
    

    【讨论】:

    • 我已经考虑过这个解决方案,但有没有办法强制验证最后选择的单元格?还是只是对这个单元格的强制验证?
    【解决方案3】:

    grid.EndEdit() 在表单关闭事件中为我工作。

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 2017-05-01
      • 2015-11-03
      • 2012-02-03
      相关资源
      最近更新 更多