Pregunta

Me gustaría agregar un color de fondo para una línea específica dependiendo de una Propiedad del objeto enlazado.

La solución que tengo (y funciona) es usar el Evento DataBindingComplete pero no creo que sea la mejor solución.

Aquí está el evento:

    private void myGrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {

        for (int i = 0; i < this.myGrid.Rows.Count; i++)
        {
            if((this.myGrid.Rows[i].DataBoundItem as MyObject).Special)
            {
                this.myGrid.Rows[i].DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);
            }
        }
    }

¿Alguna otra opción que sería mejor?

¿Fue útil?

Solución

También puede adjuntar un controlador de eventos a RowPostPaint:

dataGridView1.RowPostPaint += OnRowPostPaint;

void OnRowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    MyObject value = (MyObject) dataGridView1.Rows[e.RowIndex].DataBoundItem;
    DataGridViewCellStyle style = dataGridView1.Rows[e.RowIndex].DefaultCellStyle;

    // Do whatever you want with style and value
    ....
}

Otros consejos

Realmente no trabajo tanto con WinForms, pero en ASP usarías el método 'ItemDataBound'. ¿Hay algo similar en los formularios de Windows para un DataGrid?

Si es así, en ese método, los argumentos del evento contendrían el elemento que estaba enlazado a datos, junto con la fila DataGrid. Entonces, el código general se vería así (la sintaxis probablemente esté desactivada):

if(((MyObject)e.Item.DataItem).Special)
   e.Item.DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);

Sugeriría algunas cosas:

  • busque modificar sus filas en _OnRowDatabound
  • ¡No establezca color en su código! Esto sería un gran error. Use la propiedad de atributos y establezca la clase css. Meneo a la gente que sigue haciendo esto.

Avísame si tienes dificultades con la implementación y publicaré un fragmento.

private void myGrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{

    foreach (DataGridViewRow row in myGrid.Rows)
    {
        if((row.DataBoundItem as MyObject).Special)
        {
            row.DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top