私はasをDataGridView
持っています。ユーザーが 1 つの列に値を入力できるようにし、入力に応じて他の列の値を計算する方法を用意しました。BindingList<T>
DataSource
メソッドをイベントに入れると、CellValueChanged
編集したセルを離れると値が計算されます。
しかし、メソッドをCellValidating
イベントに入れると、次のセルを離れたときに値が計算されます。Enter キーを 2 回目に押したときにわかりやすくするためです。セルを編集した直後に別のコントロールに切り替えると、メソッドがまったく実行されません。
私はいくつかのテストを行いました。のメソッドの後にメッセージ ボックス付きの TryParse を追加しましたCellValidating
。セルを離れようとするとすぐにメッセージ ボックスが表示されますが、次のセルを離れると計算が実行されます (2 回目の入力)。
なぜこうなった?これは何が原因ですか?
編集
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);
}
}
}