DataGridView Winforms Value,EdittedFormattedValue
本文关键字:EdittedFormattedValue Value Winforms DataGridView | 更新日期: 2023-09-27 17:57:56
我正在制作一个应用程序,其中用户使用DataGridView填写发票/账单。
在DGV的每一行中,有4列:
贷方或借方,客户,贷方,借方。
CreditOrDebit可以有两个值:BY或TO1) 如果是TO,则单元格Credit将为只读,固定值为0.00,Debit将由用户填写。2) 如果是BY,则单元格"借方"将为只读,固定值为0.00,"贷方"将由用户填写。
每行结束后,将计算贷项和借项,如果贷项>借项TO行将被添加,否则将添加BY行,直到贷项=借项。
现在,当我在可编辑单元格中计算时,我必须使用EdittedFormattedValue,否则我必须使用Value。
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中),产生错误的结果。
请提出适当的解决方案。
如果我正确理解这个问题,您应该始终提交用户更改,并在您的借贷计算中始终使用Value而不是EditedFormatedValue EditedFormatedValue是单元格的当前格式化值,无论单元格是否处于编辑模式且值尚未提交。