Как сделать автоматическое сложение или вычитание

Подскажите пожалуйста как можно сделать так, что если я добавляю новую строку с данными в БД, вставленную в datagridview, эта строка сама инициализировалась по типу (доход или расход) и соответственно автоматически добавлялась к итоговой сумме "Дохода" или автоматически вычиталась от итоговой суммы "Расхода". чтобы не вводить на каждую добавленную строку отдельный код. если можно объяснить подробно, потому что я пока разбираюсь в этом и могу чего то не понять, буду признателен

Код добавления новой строки:

private void AddButton_Click(object sender, EventArgs e) {
    Form1 main = this.Owner as Form1;
    if (main != null) {
        DataRow nRow = main.база_данныхDataSet.Tables[0].NewRow();
        int rc = main.dataGridView1.RowCount + 1;
        nRow[0] = rc;
        nRow[1] = tbType.Text;
        nRow[2] = tbCategory.Text;
        nRow[3] = tbDate.Text;
        nRow[4] = tbSum.Text;
        // nRow[5] = tbTotal.Text;
        nRow[6] = tbComments.Text;

        main.база_данныхDataSet.Tables[0].Rows.Add(nRow);
        main.accountingTableAdapter.Update(main.база_данныхDataSet.Accounting);
        main.база_данныхDataSet.Tables[0].AcceptChanges();
        main.dataGridView1.Refresh();
        tbType.Text = " ";
        tbCategory.Text = " ";
        tbDate.Text = " ";
        tbSum.Text = " ";
        // tbTotal.Text = " ";
        tbComments.Text = " ";
    }
}

Вот приблизительно изобразил как надо чтобы получалось

Код, который вычисляет сумму и разность, прописанный вручную, действующий только на имеющиеся строки.

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) {
    dataGridView1.Rows[0].Cells[5].Value = Convert.ToString(Double.Parse(dataGridView1.Rows[0].Cells[4].Value.ToString()));
    dataGridView1.Rows[1].Cells[5].Value = Convert.ToString(Double.Parse(dataGridView1.Rows[0].Cells[5].Value.ToString()) + Double.Parse(dataGridView1.Rows[1].Cells[4].Value.ToString()));
    dataGridView1.Rows[2].Cells[5].Value = Convert.ToString(Double.Parse(dataGridView1.Rows[1].Cells[5].Value.ToString()) + Double.Parse(dataGridView1.Rows[2].Cells[4].Value.ToString()));
    dataGridView1.Rows[3].Cells[5].Value = Convert.ToString(Double.Parse(dataGridView1.Rows[2].Cells[5].Value.ToString()) - Double.Parse(dataGridView1.Rows[3].Cells[4].Value.ToString()));
    dataGridView1.Rows[4].Cells[5].Value = Convert.ToString(Double.Parse(dataGridView1.Rows[3].Cells[5].Value.ToString()) - Double.Parse(dataGridView1.Rows[4].Cells[4].Value.ToString()));
    dataGridView1.Rows[5].Cells[5].Value = Convert.ToString(Double.Parse(dataGridView1.Rows[4].Cells[5].Value.ToString()) - Double.Parse(dataGridView1.Rows[5].Cells[4].Value.ToString()));
}

Ответы (1 шт):

Автор решения: Bulson
private void ButtonAdd_Click(object sender, EventArgs e)
    {
        //если это не первая запись в таблице
        if (_dataSet.Tables[0].Rows.Count > 0)
        {
            //сначала находим максимальный Id
            var lastId = _dataSet.Tables[0].AsEnumerable().Max(r => r.Field<int>("Id"));
            //находим последнюю запись
            var lastRow = _dataSet.Tables[0].AsEnumerable()
                                       .First(r => r.Field<int>("Id") == lastId);

            //вычисляем значение Итого
            decimal lastTotal = lastRow.Field<decimal>("Total");
            string type = _comboBoxType.Text;
            decimal current = 0;
            if (decimal.TryParse(_textBoxSum.Text, out decimal sum))
            {
                current = (type.Equals("Доход") ? 1 : -1) * sum;
            }
            //создаем новую строку
            var row = _dataSet.Tables[0].NewRow();
            row["Type"] = type;
            row["Category"] = _comboBoxCategory.Text;
            row["Date"] = _dateTimePicker.Value;
            row["Sum"] = sum;
            row["Total"] = lastTotal + current;
            _dataSet.Tables[0].Rows.Add(row);
        }
        else
        {
            // в случае первой записи в таблицу...
        }

        //пишем в БД
        try
        {
            using (var adp = new SqlDataAdapter(_selectString, _conString))
            using (var cmb = new SqlCommandBuilder(adp))
            {
                var added = adp.Update(_dataSet.Tables[0]);
                Trace.WriteLine($"Добавлено {added}");
            }
            _dataSet.Tables[0].AcceptChanges();
            _dataGridView.Refresh();
        }
        catch (Exception ex)
        {
            Trace.WriteLine(ex.Message);
        }
    }
→ Ссылка