Inquiridor
exibir descrição de um campo na grid

Pergunta
-
Na minha página index exibo uma grid com alguns dados do usuário, tenho um campo que é do tipo smallint, mais não quero exibir esse valor quero exibir o nome para o campo exemplo : tipousu == 1 then 'Estudante' tipousu == 2 then 'avulso'.
A consulta gerada é essa :
var USUARIO = db.USUARIO.Include(u => u.CENTRO_CUSTO).Include(u => u.CLIENTE).Include(u => u.DEPARTAMENTO)
Estou usando pagedlist para paginar a grid.
Junior
Todas as Respostas
-
Olá Junior,
Sempre que é necessário alterar o modelo em que a sua view é baseada para exibir algo diferente ou personalizado na tela, eu recomendo o uso de ViewModels personalizadas. Com ela você pode "espelhar" a sua model que reflete seu banco de dados e ainda personaliza-la com esses casos que mencionou (criando alguns campos adicionais ou manipulando os já existentes)
Se for útil, marque como resposta!
Valeu!
-
-
-
Cara,
A forma mais simples de você fazer isso é usando AnonimousType , agora se quizer fazer algo mais elaborado pode criar uma ViewModel para atender a sua View.
usando os tipos anônimos:
var USUARIO = db.USUARIO.Include(u => u.CENTRO_CUSTO).Include(u => u.CLIENTE).Include(u => u.DEPARTAMENTO) .Select(c => new { TipoUsuario = c.TIPO_USUARIO == 1 ? "Estudante" : c.TIPO_USUARIO == 2 ? "Avulso" : "Vagabundo" }).ToList();
Diego Almeida Barreto</strong> <br/> <em>System Analyst / Software Developer</em> <br/> <img </p> </div>
-
Diego eu já havia feito exatamente como vc informou sendo que dá um erro em tempo de execução :
The model item passed into the dictionary is of type 'PagedList.PagedList`1[<>f__AnonymousType4`6[System.String]]', but this dictionary requires a model item of type 'PagedList.IPagedList`1[MVCEstudante.Models.USUARIO]'
Acho que esse erro é pq o campo é int e estou passando uma string.
Achei bem interessante o que o André passou e eu até implemente o view model com Auto Mapper, mais ficoou a dúvida de como passar a informação do Model para o View Model (1 - 'Estudante' 2 - 'Avulso').
Se alguém souber.
Junior
-
Legal Junior,
Acho que você implementou seguindo o post do Eduardo Pires, correto?
Então, estou assumindo que você tenha conseguido espelhar as propriedades da Model para View Model utilizando o AutoMapper e falta apenas essa questão do seu campo "tipousu".
Como você tem essa informação só na Model, você teria que criar na sua View Model uma nova propriedade string, por exemplo "DescricaoTipoUsuario" e você vai alimentar ela no seu controller mesmo, fazendo essas comparações que necessita.
Segue um exemplo:
var usuarioView = Mapper.Map<Usuario, UsuarioViewModel>(usuario); usuarioView.DescricaoTipoUsuario = usuarioView.TIPO_USUARIO.Equals("1") ? "Estudante" : "Trabalhador";
Nesse código eu estou assumindo que o nome do seu campo "tipousu" seja "TIPO_USUARIO"
Consegui te ajudar?
Valeu!
- Editado André SeccoMVP terça-feira, 26 de julho de 2016 19:21
-
Junior,
Para o seu cenário nao creio que utilizar o AutoMapper seja uma boa escolha, você não tem muitos campos as ser mapeado, de sempre preferencia ao mapeamento manual , você pode precisar de performance e você tem total domínio do mapeamento, se não tiver escapatória aconselho a utilizar o FastMapper que é 10x mais veloz e produtivo.
fiz um exemplo aqui de como pode mapear a sua ViewModel:
public class Model { public int ID { get; set; } public string NOME { get; set; } public int TIPO_USUARIO { get; set; } } public class ViewModel { public int ID { get; set; } public string NOME { get; set; } public string TIPO_USUARIO { get; set; } }
var lista = new List<Model>() { new Model{ ID=1, NOME ="HAM", TIPO_USUARIO = 2}, new Model{ ID=2, NOME ="ALO", TIPO_USUARIO = 1}, new Model{ ID=3, NOME ="VET", TIPO_USUARIO = 3}, }; var QueryNaUnha = lista.Select(c => new ViewModel { ID = c.ID, NOME = c.NOME, TIPO_USUARIO = c.TIPO_USUARIO == 1 ? "Teste1" : c.TIPO_USUARIO == 2 ? "Teste2" : "nada" }).ToList();
Diego Almeida Barreto</strong> <br/> <em>System Analyst / Software Developer</em> <br/> <img </p> </div>
-
-
Ao que tudo indica você não criou os mapeamentos antes de tentar utilizá-los
Dê uma olhada nessa thread: http://stackoverflow.com/questions/14677889/automapper-missing-type-map-configuration-or-unsupported-mapping
E nessa: http://stackoverflow.com/questions/28119476/automapper-exception-missing-type-map-configuration-or-unsupported-mapping
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor -