Я делаю одно приложение, в котором пользователь заполняет счет-фактуру, используя DataGridView.
В каждой строке DGV есть 4 столбца:
CreditOrDebit, Customer, Credit, Debit.
CreditOrDebit может иметь 2 значения: BY или TO 1) Если это TO, кредит ячейки будет считан только с фиксированным значением 0,00, а дебет будет заполнен пользователем.2) Если это BY, дебет ячейки будет считываться только с фиксированным значением 0,00, а кредит будет заполнен пользователем.
После окончания каждой строки будет рассчитываться кредит и дебет, и если кредит> дебет дострока будет добавлена, иначе строка BY будет добавлена до кредита = дебет.
Теперь, когда я вычисляю значение в редактируемой ячейке, я должен использовать EdittedFormattedValue, иначе мне нужно использовать значение.
decimal credit = 0;
decimal debit = 0;
foreach (DataGridViewRow row in dataGridViewReceipts.Rows)
{
if (row.Cells[2].Value != null)
credit += decimal.Parse(row.Cells[2].Value.ToString());
else
credit += decimal.Parse(row.Cells[2].EditedFormattedValue.ToString());
if (row.Cells[3].Value != null)
debit += decimal.Parse(row.Cells[3].Value.ToString());
else
debit += decimal.Parse(row.Cells[3].EditedFormattedValue.ToString());
}
labelCredit.Text = credit.ToString();
labelDebit.Text = debit.ToString();
Это сработало отлично.Но когда дело доходит до редактирования счета-фактуры, я заполняю все из базы данных и позволяю пользователю редактировать его.
dataGridViewReceipts.Rows[dataGridViewReceipts.Rows.Count - 1].Cells["ColumnDirection"].Value = "BY";
dataGridViewReceipts.Rows[dataGridViewReceipts.Rows.Count - 1].Cells["ColumnParty"].Value = dr["PartyName"].ToString();
dataGridViewReceipts.Rows[dataGridViewReceipts.Rows.Count - 1].Cells["ColumnParty"].Tag = dr["PartyID"].ToString();
dataGridViewReceipts.Rows[dataGridViewReceipts.Rows.Count - 1].Cells["ColumnCredit"].Value = dr.GetDecimal(dr.GetOrdinal("Amount"));
dataGridViewReceipts.Rows[dataGridViewReceipts.Rows.Count - 1].Cells["ColumnCredit"].ReadOnly = false;
dataGridViewReceipts.Rows[dataGridViewReceipts.Rows.Count - 1].Cells["ColumnDebit"].Value = "0.00";
dataGridViewReceipts.Rows[dataGridViewReceipts.Rows.Count - 1].Cells["ColumnDebit"].ReadOnly = true;
Теперь, когда я использую код, который вычисляет кредит и дебет, Cell.Value никогда не становитсяnull, поэтому всегда используется Value (новое отредактированное значение появляется в EdittedFormattedValue), что приводит к неверным результатам.
Пожалуйста, предложите подходящее решение.