none
Retorno de valor na webgrid RRS feed

  • Pergunta

  • Olá.

    Estou começando na área de programação, e me deparei com um problema que tem me tirado o sono em uma aplicação asp.net;

    Criei uma webGrid, passando como source os valores de uma base de dados via Entity; Porém, todas as células retornam exatamente o valor do banco. Não me dando a possibilidade de modifica-los;

    Exemplo:

    Na minha base existe um campo chamado escolha, do tipo bool. Quado a webgrid é preenchida, ela retorna o valor true, ou bit 1 ;

    Mas o que eu queria era algo do tipo: if(obj.escolha == true)'linha/coluna = "Ativo" ";

    Espero que tenham intendido a minha dúvida.

    Agradeço

    terça-feira, 31 de janeiro de 2017 23:47

Respostas

  • Se me permite fazer uma observação, seu código está misturando C# com Razor e tudo está na View.

    Funciona? Sim, funciona, porém não é uma boa prática. O Correto na minha visão seria fazer a consulta e tratamento dos dados na Controller e essa passaria apenas os dados para a View. Dessa forma você separa as responsabilidades de cada camada, ficando menos bagunçado.

    Se deseja fazer algo mais simples, você poderia sim criar uma lista, tratando os dados antes de mandar para a view, já que sua Model não possui tal informação. Outra forma (mais elegante na minha opinião) seria criar uma ViewModel, mapeando sua Model para ela com as devidas alterações. Dessa forma você a utilizaria como modelo para atender a necessidade dessa sua view.

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quinta-feira, 2 de fevereiro de 2017 10:58

Todas as Respostas

  • Olá,

    Sua aplicação é WebForms? Pode postar o código resultante da sua Grid?


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quarta-feira, 1 de fevereiro de 2017 11:27
  • Cara, bom dia.

    Entendi a sua duvida, ficará mais facil se você postar o seu codigo , mas se esta usando entity terá que projetar campo a campo, por exemplo :

                    var suaquery = SuaConexao.Suatabela.Select(c => new
                    {
                        SeuCampo = c.Campo
                        OutroCampo = c.CampoBool ==true ? "Ativo" : "Inativo"
    
                    }).ToList();
    No caso Acima Trabalhei com anonymous Type , porem caso seja necessário você pode criar uma DTO para receber os dados da sua entidade.


    Diego Almeida Barreto</strong> <br/> <em>System Analyst / Software Developer</em> <br/> <img </p> </div>

    quarta-feira, 1 de fevereiro de 2017 12:13
  • @model ProjetoSuporte.Models.Usuario

    @{

        ViewBag.Title = "Usuario";
        Layout = "~/_SiteLayout.cshtml";

        DadosSuporte dados = new DadosSuporte();

        var query = from p in dados.os where p.login_id.Equals(30) select p;

        ProjetoSuporte.Models.Mchamado chamado = new ProjetoSuporte.Models.Mchamado();
        

        // var query = dados.os.Where(p => p.login_id == 28);
    }
    <div>@Html.Action("Menu", "Login")</div>

    <fieldset>
       <legend>Histórico de Chamados</legend>
        <h1>Chamados</h1>
        @{
            WebGrid grid = new WebGrid(query);
           
        }
        @grid.GetHtml(
           
        )

     
        <div>Ususario: @Session["usuario"]</div>
    </fieldset>

    quarta-feira, 1 de fevereiro de 2017 17:57
  • Este é o código. Coisa simples.

    Tive uma ideia no metrô que sei que vai dar certo. Mas não sei se é a melhor opção por causa da perda de ganho.

    Criar uma lista passando um modelo, lá fazer as modificações dos dados  em uma nova lista e passar pra webgrid  esta nova lista tratada.

    Acredito dar certo Mas não sei se o desempenho cairá quando a houver muitos registros.


    E a liguagem é ASPNET MVC
    quarta-feira, 1 de fevereiro de 2017 18:04
  • Se me permite fazer uma observação, seu código está misturando C# com Razor e tudo está na View.

    Funciona? Sim, funciona, porém não é uma boa prática. O Correto na minha visão seria fazer a consulta e tratamento dos dados na Controller e essa passaria apenas os dados para a View. Dessa forma você separa as responsabilidades de cada camada, ficando menos bagunçado.

    Se deseja fazer algo mais simples, você poderia sim criar uma lista, tratando os dados antes de mandar para a view, já que sua Model não possui tal informação. Outra forma (mais elegante na minha opinião) seria criar uma ViewModel, mapeando sua Model para ela com as devidas alterações. Dessa forma você a utilizaria como modelo para atender a necessidade dessa sua view.

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quinta-feira, 2 de fevereiro de 2017 10:58
  • boa tarde,

    pode fazer isso desde faça a criação das listas no controller,e manda as informações para a view via Bind


    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;

    quinta-feira, 2 de fevereiro de 2017 14:12
  • Correto. Segui o seu conselho e deixei somente o código web na página e o c# no controle.

    Sempre tive esta dúvida se deixava o código de consulta, enfim... no controle ou no modelo. Minhas consultas estão todas no modelo como métodos. há algum problema?

    sábado, 4 de fevereiro de 2017 04:18
  • Olha, na minha opinião não é uma boa prática.

    As models deve tem as propriedades e métodos que dizem respeito apenas a elas. Geralmente as consultas são feitas na Controller (se não quiser estender tanto a aplicação), porém existem outros design patterns, como criar repositórios que farão esse trabalho de consultas com o banco de dados, etc.

    Dá uma olhada em um artigo bem simples que fala sobre o uso de repositórios com ASP.NET MVC: http://www.macoratti.net/14/04/mvc_crud.htm

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    sábado, 4 de fevereiro de 2017 21:16