Первый вариант - обновить значения ячеек, когда пользователь завершил редактирование
Вам следует обработать событие CellEndEdit
объекта DataGridView, если вы хотите обновить DataGridView после завершения работы пользователя.редактирование значений (это определяется переходом пользователя в следующую ячейку или переходом к другому элементу управления в вашей форме).Для получения дополнительной информации см. MSDN - Событие DataGridView.CellEndEdit .
Происходит, когда режим редактирования останавливается для текущей выбранной ячейки.
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs dataGridViewCellEventArgs)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
decimal a = Convert.ToDecimal(dataGridView1.Rows[i].Cells[2].Value);
decimal b = Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value);
decimal c = a * b;
dataGridView1.Rows[i].Cells[4].Value = c.ToString();
}
GrandTotal();
Qty();
}
Второй вариант - обновлять значения ячеек, когда пользователь печатает
Использование этого метода немного сложнее и требует правильной обработки события EditControlShowing
, а для TextBox
это TextChanged
event.
Вам следует обработать событие EditControlShowing
объекта DataGridView, если вы хотите обновить DataGridView, когда пользователь печатает.Это событие даст вам доступ к элементу управления Edit.Для простых установок DataGridView это TextBox.Хотя это может быть ComboBox, CheckBox или любое количество других элементов управления.
См. MSDN - DataGridView.EditingControlShowing Event для получения дополнительной информации.
Происходиткогда отображается элемент управления для редактирования ячейки ..
private DataGridViewRow CurrentRow;
private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs dataGridViewEditingControlShowingEventArgs)
{
CurrentRow = dataGridView1.CurrentRow;
TextBox textBox = dataGridViewEditingControlShowingEventArgs.Control as TextBox;
if (textBox != null)
{
textBox.TextChanged -= textBox_TextChanged;
textBox.TextChanged += textBox_TextChanged;
}
}
private void textBox_TextChanged(object sender, EventArgs eventArgs)
{
TextBox textBox = (TextBox)sender;
decimal a = Convert.ToDecimal(CurrentRow.Cells[2].Value);
decimal b = Convert.ToDecimal(CurrentRow.Cells[3].Value);
decimal c = a * b;
CurrentRow.Cells[4].Value = c.ToString();
}
Примечание: Обязательно добавьте строку:
textBox.TextChanged -= textBox_TextChanged;
Какобработчики добавляются во время выполнения, каждый раз, когда отображается элемент управления Edit, необходимо удалить любой ранее добавленный обработчик, в противном случае он будет вызываться несколько раз.