none
GridView + EF 4 RRS feed

  • Pergunta

  • Galera, tudo bom?

    Estou com uma dúvida/dificuldade.  Tenho uma procedure que me retorna algumas colunas do banco e estou usando o Entity Framework pra fazer a minha aplicação web interagir com o BD. Usando o EF 4 eu importei ao projeto essa proc (Update model from Database) e criei um tipo complexo que tem os parâmetros de retorno dessa procedure. Numa classe que chama esse método (proc) eu faço retornar uma lista desse tipo complexo que será usada para popular um gridView. O problema é que quando eu coloco gridview.Datasource pra receber os dados ele recebe os parametros do tipo complexo criado pelo EF e os parametros que não sao public...

    Por exemplo, se minha classe complexa criada pelo EF tem os seguintes atributos: nome, telefone,endereco. Quando for passado para o Datasource será passado _nome, _telefone, _endereco ,nome, telefone, endereco, deixando o gridview com o dobro de parametros. Mesmo eu setando quais colunas eu quero que ele exiba nas propriedades <asp:BoundColumn DataField="endereco".ele ainda exibe as colunas com o '_'. E se eu tento fazer o dataField = "_endereco" ele da erro falando que não existe esse nome de coluna....

    Alguém já passou por isso?

    Tem como não passar o _nomeAtributo gerado pelo tipo complexo do EF para o gridview? 


    Muito obrigado

    Esdras

    quarta-feira, 31 de outubro de 2012 19:36

Respostas

  • Amigo, boa tarde

    por que você não gera uma lista em tempo de execução dado o retorno da sua consulta, por exemplo, dado uma página de exemplo aonde uma classe representa um entidade com suas propriedades e variáveis

    public partial class b9f43fc3_2c48_4df8_88dc_aabe4161c479 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                GridView grd = new GridView();
                List<Usuario> lstUsuarios = new List<Usuario>();
                lstUsuarios.Add(new Usuario() { Nome = "Goku", Origem = "Vegeta" });
                lstUsuarios.Add(new Usuario() { Nome = "Gohan", Origem = "Terra" });
                lstUsuarios.Add(new Usuario() { Nome = "Piccolo ", Origem = "Namekusei" });
    
                ///Criando uma lista em tempo de execução
                var novaListaUsuarios = from x in lstUsuarios
                                        select new
                                        {
                                            Nome = x.Nome,
                                            PlanetaOrigem = x.Origem
                                        };
                GridView1.DataSource = novaListaUsuarios.ToList();
                GridView1.DataBind();
            }
        }
        public class Usuario
        {
            private string nome;
    
            public string Nome
            {
                get { return nome; }
                set { nome = value; }
            }
            private string origem;
    
            public string Origem
            {
                get { return origem; }
                set { origem = value; }
            }
        }


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    • Marcado como Resposta Esdras L quinta-feira, 1 de novembro de 2012 10:40
    quarta-feira, 31 de outubro de 2012 19:56
    Moderador
  • Ola Olavo, não tinha pensado em criar a lista em tempo de execução, muito obrigado!Eu acabei descobrindo o pq do Gridview gerar as outras colunas. Acabei esquecendo de settar a propriedade de  autogeneratecolumns como falso, dai no bind ele pegava as  outras propriedades do tipo complexo.

    Mas muito obrigado pela resposta =D

    quinta-feira, 1 de novembro de 2012 10:40

Todas as Respostas

  • Amigo, boa tarde

    por que você não gera uma lista em tempo de execução dado o retorno da sua consulta, por exemplo, dado uma página de exemplo aonde uma classe representa um entidade com suas propriedades e variáveis

    public partial class b9f43fc3_2c48_4df8_88dc_aabe4161c479 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                GridView grd = new GridView();
                List<Usuario> lstUsuarios = new List<Usuario>();
                lstUsuarios.Add(new Usuario() { Nome = "Goku", Origem = "Vegeta" });
                lstUsuarios.Add(new Usuario() { Nome = "Gohan", Origem = "Terra" });
                lstUsuarios.Add(new Usuario() { Nome = "Piccolo ", Origem = "Namekusei" });
    
                ///Criando uma lista em tempo de execução
                var novaListaUsuarios = from x in lstUsuarios
                                        select new
                                        {
                                            Nome = x.Nome,
                                            PlanetaOrigem = x.Origem
                                        };
                GridView1.DataSource = novaListaUsuarios.ToList();
                GridView1.DataBind();
            }
        }
        public class Usuario
        {
            private string nome;
    
            public string Nome
            {
                get { return nome; }
                set { nome = value; }
            }
            private string origem;
    
            public string Origem
            {
                get { return origem; }
                set { origem = value; }
            }
        }


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    • Marcado como Resposta Esdras L quinta-feira, 1 de novembro de 2012 10:40
    quarta-feira, 31 de outubro de 2012 19:56
    Moderador
  • Ola Olavo, não tinha pensado em criar a lista em tempo de execução, muito obrigado!Eu acabei descobrindo o pq do Gridview gerar as outras colunas. Acabei esquecendo de settar a propriedade de  autogeneratecolumns como falso, dai no bind ele pegava as  outras propriedades do tipo complexo.

    Mas muito obrigado pela resposta =D

    quinta-feira, 1 de novembro de 2012 10:40