我正在制作一个应用程序,其中用户使用DataGridView填充发票/帐单。DataGridView Winforms Value,EdittedFormattedValue
在DGV的每一行中,有4列:
CreditOrDebit,Customer,Credit,Debit。
CreditOrDebit可以有2个值:BY或TO 1)如果是单元格信用卡将只读固定值为0.00,借记卡将由用户填写。 2)如果是单元格借方将只读固定值0.00,并且信用将由用户填写。
每行结束后,信用卡和借记卡将被计算,如果信用卡>借方行将被添加,否则将添加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不会成为有史以来空,所以总是该值用于(新的编辑值将出现在EdittedFormattedValue)产生错误的结果。
请建议适当的解决方案。
我完全误解了你的问题然后..请提供一个更清楚的问题是什么样的例子。 – alexD 2011-05-26 17:18:34