比较DataGridView单元格中的旧值和新值

时间:2011-08-14 22:29:18

标签: c# .net datagridview

如何根据新单元格值是否为>更改DataGridView单元格ForeColor?或者<比当前/旧单元格值?是否存在在更改当前值之前传递新值的事件,因此我可以比较它们?

数据从底层源更新,可能受BindingSource绑定。

4 个答案:

答案 0 :(得分:21)

我遇到了类似的问题。我通过使用CellValidating事件来解决这个问题:

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

不可否认,我只需要访问旧值,我不需要执行任何格式化。我确定你可以通过这个事件处理程序应用格式化。

答案 1 :(得分:0)

您可以将单元格的旧值存储在变量中,以根据结果比较和更改ForeColor,然后从变量中删除旧值。

问候。

答案 2 :(得分: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;
        }
    }
}

答案 3 :(得分:0)

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

如果要在保存之前检查该值,请查看DataGridView.CurrentCellDirtyStateChanged(http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentcelldirtystatechanged。 C ++)。