繁体   English   中英

Winforms DataGridView CellValidating和CellValueChanged

[英]Winforms DataGridView CellValidating and CellValueChanged

我有一个BindingList<T>作为DataSourceDataGridView 我让用户将值输入到一列中,并且我有一种根据输入来计算其他列值的方法。

现在,当我将方法放入CellValueChanged事件中时,值将在离开编辑单元格时进行计算。

但是,当我将方法放入CellValidating事件时,值将在我离开下一个单元格时进行计算。 为了更清楚地说明我第二次按Enter。 如果在编辑单元格后立即切换到另一个控件,则根本不会执行我的方法。

我做了一些测试。 我在CellValidating方法后在消息框中添加了TryParse。 当我尝试离开一个单元格时,将立即显示消息框,而当我离开下一个单元格(第二个Enter)时,仍然会运行计算。

为什么会这样呢? 这是什么原因引起的?

编辑

flightDataGridView.DataSource = flight.Ships;
BindingList<Ship> _ships = new BindingList<Ship>();

_ships.Add(new Ship([some stuff here]));
.
.


public void UpdateCargoCapacity()
        {
            foreach (Ship ship in _ships)
            {
                ship.CargoCapacity = ship.SingleCargoCapacity * ship.Quantity;
            }
            flightDataGridView.Refresh();
        }

private void flightDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            flight.UpdateCargoCapacity();
            if (e.ColumnIndex == 1)
            {
                int i;
                if (!int.TryParse(Convert.ToString(e.FormattedValue), out i))
                {
                    e.Cancel = true;
                    MessageBox.Show("Incorrect input", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

        }

我已经考虑过了,以这种方式工作的原因非常简单。 触发CellValidating ,单元仍具有旧值。 然后值被更新。 然后,当验证下一个单元格时,将再次执行计算方法,并使用上一个单元格的新值进行计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM