新しいセル値が>または<かどうかに基づいてDataGridViewセルForeColorを変更する方法現在の値が変更される前に新しい値を渡すイベントがあるので、比較することができますか?DataGridViewセルの古い値と新しい値を比較する
データは元のソースから更新され、BindingSourceによってバインドされている可能性があります。
新しいセル値が>または<かどうかに基づいてDataGridViewセルForeColorを変更する方法現在の値が変更される前に新しい値を渡すイベントがあるので、比較することができますか?DataGridViewセルの古い値と新しい値を比較する
データは元のソースから更新され、BindingSourceによってバインドされている可能性があります。
同様の問題が発生しました。私の代わりにCellValidating
イベントを使用してこれを取り組ん:
void dgv_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
var oldValue = dgv[e.ColumnIndex, e.RowIndex].Value;
var newValue = e.FormattedValue;
}
確かに、私は古い値にだけ必要なアクセス、私は任意のフォーマットを実行する必要はありませんでした。私はあなたがこのイベントハンドラを通してフォーマットを適用できると確信しています。
変数にセルの古い値を格納し、結果に応じてForeColorを比較および変更してから、変数から古い値を削除することができます。
よろしくお願いいたします。
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;
}
}
}
あなたは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
を見てください。
単にリンクを投稿するのではなく、ソリューションの関連部分も回答に投稿する方が良いです。 –
私は多くの列が必要なので、避けたいと思っていましたが、簡単な方法ではない場合は... – bretddog