Сравнение старого и нового значения в ячейке DataGridView
Как изменить ячейку DataGridView ForeColor на основе того, является ли новое значение ячейки > или < чем текущее/старое значение ячейки? Есть ли событие, которое передает новое значение перед изменением тока, поэтому я могу их сравнить?
Данные обновляются из исходного источника и могут быть связаны BindingSource.
Ответы
Ответ 1
У меня возникла аналогичная проблема. Я решил это, используя CellValidating
событие:
void dgv_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
var oldValue = dgv[e.ColumnIndex, e.RowIndex].Value;
var newValue = e.FormattedValue;
}
По общему признанию, мне просто нужен был доступ к старому значению, мне не нужно было форматировать. Я уверен, что вы можете применять форматирование через этот обработчик событий.
Ответ 2
Вы можете сохранить старое значение ячейки в переменной, чтобы сравнить и изменить ForeColor в зависимости от результата, а затем удалить старое значение из переменной.
С уважением.
Ответ 3
Если внутренним источником элемента управления DataGridView является DataTable, вы можете использовать более раннюю версию DataRow с использованием перечисления DataRowVersion. Обратите внимание, что я использовал событие CellFormatting.
Пример:
private void DataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
// if NOT the DataGridView 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;
}
}
}
Ответ 4
Вы можете посмотреть событие 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).