我正在製作一個應用程序,其中用戶使用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