如何在加载时DGV中的总行数

时间:2011-09-14 16:39:57

标签: winforms c#-4.0 datagridview

您好我正在尝试将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);

但问题似乎是我必须使用一个事件来触发计算。

对此事的任何帮助都将不胜感激。

1 个答案:

答案 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);
}