Если вы используете привязку данных, вы можете установить общее количество строк в событии DataGridView DataBindingComplete
.
Код, который вы предоставили, выглядит так, как будто он обновит столбец итогов, но давайте немного его реорганизовать, чтобы вы могли использовать его более чем в одном месте:
private void ComputeAndDisplayRowTotal(int rowIndex) {
int val1 = Convert.ToInt32(dataGridView1.Rows[rowIndex].Cells[1].Value);
int val2 = Convert.ToInt32(dataGridView1.Rows[rowIndex].Cells[2].Value);
int val3 = Convert.ToInt32(dataGridView1.Rows[rowIndex].Cells[3].Value);
int val4 = Convert.ToInt32(dataGridView1.Rows[rowIndex].Cells[4].Value);
int val5 = Convert.ToInt32(dataGridView1.Rows[rowIndex].Cells[5].Value);
int val6 = Convert.ToInt32(dataGridView1.Rows[rowIndex].Cells[6].Value);
int val7 = Convert.ToInt32(dataGridView1.Rows[rowIndex].Cells[7].Value);
int val8 = Convert.ToInt32(dataGridView1.Rows[rowIndex].Cells[8].Value);
dataGridView1.Rows[e.RowIndex].Cells[9].Value = (val1 + val2 + val3 + val4) - (val5 + val6 + val7 + val8);
}
Вызовите этот метод в вашем DataBindingComplete
событии следующим образом:
private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) {
foreach (DataGridViewRow row in dataGridView1.Rows) {
// Don't want to update the total column on the new row at the bottom of the DGV.
if (!row.IsNewRow) {
ComputeAndDisplayRowTotal(row.Index);
}
}
}
Теперь, если вы разрешите пользователю редактировать ячейку, вы можете обновить столбец итогов строки, используя событие CellEdnEdit
, например:
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
ComputeAndDisplayRowTotal(e.RowIndex);
}