Como trabalhar com objetos aninhados (associados) em um GridView a partir de um ObjectDataSource

Olá pessoal, tudo bom?

Vejam abaixo um exemplo de como trabalhar em um GridView com valores oriundos de uma lista de objetos aninhados (associados).

No exemplo temos um GridView que exibe dados de produtos com suas respectivas categorias e fornecedores, sendo que o objeto da classe produto possui uma associação com o objeto da classe categoria e outra associação com o objeto da classe fornecedor, não sendo necessário realizar outros “selects” ou “junções” para recuperação desses dados.

Toda codificação necessária ocorre dentro do evento RowDataBound, lembrando que esse evento ocorre todas as vezes que os dados são associados a uma linha do GridView. Repare que as propriedades LigaCategoria e LigaFornecedor são as associações entre a classe Produto, Categoria e Fornecedor.

Exemplo:

...
...
protected void gvProdutos_RowDataBound(object sender, GridViewRowEventArgs e)
{
   //Verifica se o que está sendo colocado na linha é um objeto da classe Produto
   if (e.Row.DataItem is Produto)
   {
      //Cria um objeto da classe Produto, que já tem a referência para o objeto da classe Categoria
      Produto prod = (Produto)e.Row.DataItem;
      e.Row.Cells[2].Text = prod.LigaCategoria.Nome; //Obtendo o nome da categoria do produto
      //Personaliza a aparência da coluna
      e.Row.Cells[2].Font.Bold = true;
      e.Row.Cells[2].ForeColor = System.Drawing.Color.Red;

      //Cria um objeto da classe Produto, que já tem a referência para o objeto da classe Fornecedor
      e.Row.Cells[3].Text = prod.LigaFornecedor.NomeEmpresa; //Obtem o nome da empresa fornecedora
      //Personaliza a aparência da coluna
      e.Row.Cells[3].Font.Bold = true;
      e.Row.Cells[3].ForeColor = System.Drawing.Color.Blue;
   }
}
...
...

Grande abraço,
Eduardo Henrique Rizo

[twitter-follow screen_name='eduardorizo' show_count='yes']

Marcado com: , , , , , ,

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*