У меня есть DataGridView
с BindingList<T>
как DataSource
. Я позволяю вводить пользовательские значения в один столбец, и у меня есть метод для вычисления других значений столбца в зависимости от ввода.Winforms DataGridView CellValidating и CellValueChanged
Теперь, когда я помещаю свой метод в событие CellValueChanged
, значение вычисляется, когда я оставляю отредактированную ячейку.
Но, когда я поместил свой метод в событие CellValidating
, значение вычисляется при выходе из следующей ячейки. Чтобы сделать его более понятным, когда я нажимаю Enter во второй раз. Если я переключусь на другой элемент управления сразу после редактирования ячейки, мой метод вообще не выполняется.
Я проверил некоторые испытания. Я добавил TryParse с полем сообщений после моего метода в CellValidating
. Ящик сообщений отображается сразу же, когда я пытаюсь покинуть ячейку, все еще выполняется подсчет, когда я покидаю следующую ячейку (второй ввод).
Почему это происходит? Что это может быть вызвано?
Редактировать
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);
}
}
}
Необходимо указать соответствующий код – Shaharyar