Array
(
)

Pupular GridView

Gebram Seguros
   - 26 set 2011

Tenho duas estruturas de Classes:
Cliente
public class Cliente
{
private int _codSegurado;
public int CodSegurado
{
get { return _codSegurado; }
set { _codSegurado = value; }
}
private string _nome;
public string Nome
{
get { return _nome; }
set { _nome = value; }
}
}
ClienteContato
public class ClienteContato
{
private Cliente _cliente;
public Cliente Cliente
{
get { return _cliente; }
set { _cliente = value; }
}
private int _codSequencia;
public int CodSequencia
{
get { return _codSequencia; }
set { _codSequencia = value; }
}
private string _nome;
public string Nome
{
get { return _nome; }
set { _nome = value; }
}

private string _email;
public string Email
{
get { return _email; }
set { _email = value; }
}
private string _fone;
public string Fone
{
get { return _fone; }
set { _fone = value; }
}
}
Baseando na Estrutura das classes não estou conseguindo popular em um GridView a classe ClienteContato trazendo a coluna CódSegurado do Cliente. Como posso fazer isso ?

Gebram Seguros
   - 26 set 2011

Eu estou usando:

<asp:BoundField DataField=Cliente.CodSegurado/>

para trazer os dados, mas ocorre o seguinte erro:

Não foi encontrado campo ou propriedade com o nome Cliente.CodSegurado na fonte de dados selecionada.

Bruno Costa
   - 27 set 2011

Então. Eu também não consegui colocar dados de duas entidades em um mesmo grid.
O que eu fiz para solucionar foi colocar no grid os dados da classe principal e criar um botão no grid que ao clicar exibi todos os dados na tela, pode ser nos textbox mesmo.

Ex:
Tenho a classe Cliente, TelefoneCliente, e EnderecoCliente.
Na classe Cliente tenho dudas propriedades uma do tipo TelefoneCliente e outra EnderecoCliente.

Faço um select no banco que retorna o dados da Tabela Cliente inner join TelefoneCliente inner join EnderecoCliente.

Monto o objeto Cliente com os dados de Telefone e Endereco

No grid eu só mostro os dados da Classe Cliente e ao clicar em um botão do tipo template field no mesmo grid exibi nos textbox os dados do Cliente, telefone e endereço.

Rodrigo Odasaki
   - 03 dez 2011

Baseando nas suas classes, você pode fazer isso com uma consulta LINQ utilizando JOIN

Assim você vai realizar uma junção entre elas, podendo exibir colunas tanto de uma classe quanto de outra.

Rodrigo Odasaki
   - 03 dez 2011

Exemplo

#Código

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        List<Cliente> clientes = new List<Cliente>()
        {
            new Cliente { CodSegurado = 1, Nome = João Oliveira },
            new Cliente { CodSegurado = 2, Nome = Daniela Santos },
            new Cliente { CodSegurado = 3, Nome = Juliana Amorin }
        };

        IEnumerable<ClienteContato> clienteContatos = new List<ClienteContato>()
        {
            new ClienteContato { CodCliente = 1,  Email = joao.oliveira@internet.com, Fone = 11111111 },
            new ClienteContato { CodCliente = 2,  Email = dani.santos@internet.com, Fone = 22222222 },
            new ClienteContato { CodCliente = 3,  Email = juliana.amorin@internet.com, Fone = 33333333 }
        };
        

        var dados = from c in clientes
                    join p in clienteContatos on c.CodSegurado equals p.CodCliente
                    select new { c.CodSegurado, c.Nome, p.Email, p.Fone };

        GridView1.DataSource = dados;
        GridView1.DataBind();
    }

    public class Cliente
    {
        public int CodSegurado { get; set; }
        public string Nome { get; set; }
    }

    public class ClienteContato
    {
        public int CodCliente { get; set; }
        public string Email { get; set; }
        public string Fone { get; set; }
    }
}