2011-08-14 21 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の場合、DataRowVersion列挙型を使用してDataRowの古いバージョンを利用できます。私はCellFormatting Eventを利用しています。

例:

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を見てみたいことがあり)。

あなたはそれを保存する前に値を確認したい場合は、(http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentcelldirtystatechanged.aspx)DataGridView.CurrentCellDirtyStateChangedを見てください。

+0

単にリンクを投稿するのではなく、ソリューションの関連部分も回答に投稿する方が良いです。 –

関連する問題