我有一个DataGridView
with BindingList<T>
as DataSource
。我让用户将值输入到一列中,并且我有一种根据输入计算其他列值的方法。
现在,当我将方法放入CellValueChanged
事件中时,值会在我离开编辑的单元格时进行计算。
但是,当我将方法放入CellValidating
事件中时,值会在我离开下一个单元格时计算。为了在我第二次按 Enter 时更清楚。如果我在编辑单元格后立即切换到另一个控件,则根本不会执行我的方法。
我做了一些测试。我在CellValidating
. 当我尝试离开一个单元格时,消息框会立即显示,当我离开下一个单元格时仍然会运行计算(第二个 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);
}
}
}