2011-08-14 94 views
13

如何根據新單元格值是>還是<來更改DataGridView單元格ForeColor比當前/舊單元格值更改?是否有一個事件在電流改變之前傳遞新值,所以我可以比較它們?在DataGridView單元格中比較舊值和新值

數據從底層源更新,並可能由BindingSource綁定。

回答

20

我遇到了類似的問題。我解決了這個利用CellValidating事件,而不是:

void dgv_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
{ 
    var oldValue = dgv[e.ColumnIndex, e.RowIndex].Value; 
    var newValue = e.FormattedValue; 
} 

誠然,我只需要訪問舊價值,我並不需要進行任何格式。不過,我相信你可以通過這個事件處理程序來應用格式。

0

您可以將單元格的舊值存儲在變量中,根據結果比較和更改ForeColor,然後從變量中刪除舊值。

問候。

+0

我希望避免這種情況,因爲我需要很多列,但如果這不是更簡單的方法... – bretddog

0

如果DataGridView控件的內部源是DataTable,那麼您可以使用DataRow的舊版DataRowVersion枚舉。請注意,我使用了CellFormatting事件。

例子:

private void DataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    // if NOT the DataGridView's new row 
    if (!this.dataGridView1.Rows[e.RowIndex].IsNewRow) 
    { 
     // if my desired column 
     if (e.ColumnIndex == 0) 
     { 
      TestDataSet.TestRow row; 

      row = (TestDataSet.TestRow)((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem).Row; 

      if (row.Column1, (int)row["Column1", DataRowVersion.Original]) > 0) 
        e.CellStyle.ForeColor = Color.Red; 
     } 
    } 
} 
0

你可能想看看DataGridView.CellValueChanged事件(http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvaluechanged.aspx )。

如果要在保存值之前檢查該值,請參閱DataGridView.CurrentCellDirtyStateChanged(http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.currentcelldirtystatechanged.aspx)。

+0

而不是簡單地發佈鏈接,最好將解決方案的相關部分發布到您的答案中。 –