您好我正在尝试将DGV中每行的单元格合计,并在加载时将其添加到总列中。我知道如何做到这一点,但我不知道在哪里放置代码。我知道我可以做点什么
int val1 = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[1].Value);
int val2 = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[2].Value);
int val3 = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[3].Value);
int val4 = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[4].Value);
int val5 = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[5].Value);
int val6 = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[6].Value);
int val7 = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[7].Value);
int val8 = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[8].Value);
dataGridView1.Rows[e.RowIndex].Cells[9].Value = (val1 + val2 + val3 + val4) - (val5 + val6 + val7 + val8);
但问题似乎是我必须使用一个事件来触发计算。
对此事的任何帮助都将不胜感激。
韩
答案 0 :(得分:2)
如果您正在使用数据绑定,则可以在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);
}