2011-08-14 14 views
13

Cómo cambiar la celda DataGridView ForeColor en función de si el nuevo valor de celda es> o < que el valor de celda actual/anterior? ¿Hay algún evento que pase el nuevo valor antes de que se cambie la corriente, para que pueda compararlos?Comparar valores antiguos y nuevos en la celda DataGridView

Los datos se actualizan desde el origen subyacente y pueden estar vinculados por BindingSource.

Respuesta

20

Me encontré con un problema similar. Abordé este utilizando el evento CellValidating lugar:

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

Es cierto, sólo es necesario acceder al valor antiguo, que no necesitaba para llevar a cabo ningún tipo de formato. Sin embargo, estoy seguro de que puede aplicar formato a través de este controlador de eventos.

0

Puede almacenar el valor anterior de la celda en una variable, para comparar y cambiar el ForeColor según el resultado, y luego eliminar el valor anterior de la variable.

Atentamente.

+0

Esperaba evitar eso, ya que necesito muchas columnas, pero si no es una manera más fácil ... – bretddog

0

Si la fuente interna del control DataGridView es una DataTable, puede utilizar la versión anterior de DataRow usando DataRowVersion enum. Tenga en cuenta que he utilizado el evento CellFormatting.

Ejemplo:

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

Es posible que desee ver en el evento DataGridView.CellValueChanged (http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvaluechanged.aspx)

Si desea comprobar el valor antes de guardarlo, mire DataGridView.CurrentCellDirtyStateChanged (http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentcelldirtystatechanged.aspx).

+0

En lugar de simplemente publicar enlaces, siempre es mejor publicar la parte relevante de la solución en su respuesta también. –

Cuestiones relacionadas