DataGridView Winforms Значение, EdittedFormattedValue - PullRequest
1 голос
/ 26 мая 2011

Я делаю одно приложение, в котором пользователь заполняет счет-фактуру, используя 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), что приводит к неверным результатам.

Пожалуйста, предложите подходящее решение.

1 Ответ

1 голос
/ 26 мая 2011

Если я правильно понял вопрос, вы должны всегда фиксировать изменения пользователя и всегда использовать Значение вместо EditedFormatedValue в расчете кредита и дебета.

EditedFormatedValue - это текущее отформатированное значение ячейки, независимо от того, находится ли ячейка в режиме редактирования и значение не было зафиксировано .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...