Pergunta

Eu gostaria de adicionar um backcolor para linha específica dependendo de uma propriedade do objeto binded.

A solução que eu (e funciona) é usar o DataBindingComplete evento, mas eu não acho que é a melhor solução.

Aqui é o 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);
            }
        }
    }

Qualquer outra opção que seria melhor?

Foi útil?

Solução

Você também pode anexar um manipulador de eventos para 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
    ....
}

Outras dicas

Eu realmente não trabalho com WinForms que muito, mas em ASP você usaria o método 'ItemDataBound'. Existe algo semelhante no Windows Forms para um DataGrid?

Se assim for, em que o método, os argumentos do evento deve conter o item que foi databound, juntamente com a linha DataGrid. Assim, o código geral seria algo parecido com isto (a sintaxe é provavelmente off):

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

Gostaria de sugerir algumas coisas:

  • olhada modificando suas linhas de _OnRowDatabound
  • não definir a cor em seu código !!! Este seria um grande erro. Use a propriedade atributos e definir o cssclass. Wag do dedo para as pessoas ainda fazer isso.

Deixe-me saber se você luta com a implementação e eu vou postar um trecho.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top