none
exibir descrição de um campo na grid RRS feed

  • 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

    terça-feira, 26 de julho de 2016 13:23

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!

    terça-feira, 26 de julho de 2016 13:58
  • André entendi, mais como eu combino essas informações no meu select ?

    Junior

    terça-feira, 26 de julho de 2016 14:04
  • Acredito que esse artigo lhe será útil: http://eduardopires.net.br/2013/08/asp-net-mvc-view-model-pattern-quando-e-como-utilizar/
    terça-feira, 26 de julho de 2016 14:25
  • 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>

    terça-feira, 26 de julho de 2016 15:45
  • 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

    terça-feira, 26 de julho de 2016 19:04
  • 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!


    terça-feira, 26 de julho de 2016 19:20
  • 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&lt;/strong&gt; &lt;br/&gt; &lt;em&gt;System Analyst / Software Developer&lt;/em&gt; &lt;br/&gt; &lt;img &lt;/p&gt; &lt;/div&gt;

    terça-feira, 26 de julho de 2016 20:27
  • Desculpe a ausência por tanto tempo é que estava resolvendo problemas urgentes em web forms, voltando então usando auto mapper está dando erro qdo tento abrir a página

    Missing type map configuration or unsupported mapping.


    Junior

    quarta-feira, 3 de agosto de 2016 13:29
  • 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

    quarta-feira, 3 de agosto de 2016 13:40
  • Dá erro em 

    Mapper.CreateMap


    Junior

    quarta-feira, 3 de agosto de 2016 13:48