#c# #winforms #datagridview
#c# #winforms #datagridview
Вопрос:
Я создаю одно приложение, в котором пользователь заполняет счет-фактуру, используя DataGridView.
В каждой строке DGV есть 4 столбца:
creditOrDebit,Customer,Credit,Debit.
creditOrDebit может иметь 2 значения: BY или TO 1) Если оно относится К ячейке, то кредит будет доступен только для чтения с фиксированным значением 0.00, а дебет будет заполнен пользователем. 2) Если оно указано в ячейке, дебет будет доступен только для чтения с фиксированным значением 0.00, а кредит будет заполнен пользователем.
После окончания каждой строки будут вычислены кредит и дебет, и если будет добавлен кредит> дебет В строку, будет добавлено еще по строке, пока кредит = дебет.
Теперь, когда я вычисляю значение в редактируемой ячейке, я должен использовать отредактированное форматированное значение, иначе я должен использовать значение.
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 никогда не становится нулевым, поэтому всегда используется значение (новое отредактированное значение отображается в EdittedFormattedValue), что приводит к неправильным результатам.
Пожалуйста, предложите подходящее решение.
Комментарии:
1. Тогда я совершенно неправильно понял ваш вопрос .. пожалуйста, приведите более наглядный пример того, в чем проблема.
Ответ №1:
Если я правильно понял вопрос, вы всегда должны фиксировать пользовательские изменения и всегда использовать значение вместо отредактированного форматированного значения при расчете кредита и дебета.
Отредактированное форматированное значение — это текущее форматированное значение ячейки, независимо от того, находится ли ячейка в режиме редактирования и значение не было зафиксировано.
Комментарии:
1. Есть ли какой-либо способ автоматически зафиксировать ячейку после ее редактирования?
2. Попробуйте зафиксировать событие изменения значения ячейки или установите cell.value = cell.editedFormattedText.