Как суммировать строки в DGV при загрузке - PullRequest
0 голосов
/ 14 сентября 2011

Здравствуйте. Я пытаюсь суммировать ячейки каждой строки в 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 Ответ

2 голосов
/ 15 сентября 2011

Если вы используете привязку данных, вы можете установить общее количество строк в событии 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...