Сравните старое и новое значение в ячейке DataGridView - PullRequest
13 голосов
/ 15 августа 2011

Как изменить ForeColor ячейки DataGridView в зависимости от того, является ли новое значение ячейки> или <текущее / старое значение ячейки?Есть ли событие, передающее новое значение до изменения текущего, чтобы я мог сравнить их?</p>

Данные обновляются из базового источника и могут быть связаны с BindingSource.

Ответы [ 4 ]

21 голосов
/ 08 января 2012

Я столкнулся с подобной проблемой. Я решил это, используя вместо этого событие CellValidating:

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

Правда, мне просто нужен был доступ к старому значению, мне не нужно было выполнять какое-либо форматирование. Я уверен, что вы можете применить форматирование через этот обработчик событий.

0 голосов
/ 15 августа 2011

Если внутренним источником элемента управления 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 голосов
/ 22 августа 2011

Вы можете посмотреть на событие 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.aspx).

0 голосов
/ 15 августа 2011

Вы можете сохранить старое значение ячейки в переменной, сравнить и изменить ForeColor в зависимости от результата, а затем удалить старое значение из переменной.

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...