Usuário com melhor resposta
GridView + EF 4

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
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
-
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
- Marcado como Resposta Olavo Oliveira NetoModerator quinta-feira, 1 de novembro de 2012 12:20
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
-
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
- Marcado como Resposta Olavo Oliveira NetoModerator quinta-feira, 1 de novembro de 2012 12:20