none
Inserir itens num Grid RRS feed

  • Pergunta

  • Boa tarde Galera !

    Estou precissando criar um grid que o usuario vai listar os Produtos e Subprodutos e adicionar nesse grid, para posteriormente salvar no banco.

    Qual a melhor maneira de realizar essa rotina ? Alguem tem um exemplo ?


    quarta-feira, 2 de julho de 2014 18:10

Respostas

Todas as Respostas

  • Olha esse exemplo que utilizei recentemente:

    private void inserirProdOrcamento()
            {
                //Instância da conexão onde passo a
                //ConnectionString
                if (!String.IsNullOrEmpty(txtCodOrcamento.Text))
                {
                    MySqlConnection conn = daoBanco.getInstancia().getConexao();
                    //sql que será executado na tabela cliente
                    StringBuilder sb = new StringBuilder();
                    sb.Append("INSERT INTO prodorcamento (FkidOrcamento,idProduto,            ");
                    sb.Append("Qtd,valorDesconto,Servico,Dano,hsPintura,hsServico,            ");
                    sb.Append("PrecoTotal,Autorizacao)                                        ");
                    sb.Append("VALUES (@idOrcamento,@idProduto, @Qtd,@valorDesconto           ");
                    sb.Append(",@Servico,@Dano,@hsPintura,@hsServico,@PrecoTotal,@Autorizacao)");
                    //instância do comando onde passo
                    //o sql e a conexão como parâmetro
                    MySqlCommand cmd = new MySqlCommand(sb.ToString(), conn);
                    //abro a conexão
                    conn.Open();
    
                    //percorro o DataGridView
                    for (int i = 0; i < dgvDetalhes.Rows.Count; i++)
                    {
                        if (dgvDetalhes.Rows[i].Cells[0].Value != null && dgvDetalhes.Rows[i].Cells[1].Value != null)
                        {
                            cmd.Parameters.AddWithValue("@idOrcamento", txtCodOrcamento.Text);
                            cmd.Parameters.AddWithValue("@idProduto", dgvDetalhes.Rows[i].Cells[12].Value);
                            cmd.Parameters.AddWithValue("@Qtd", dgvDetalhes.Rows[i].Cells[2].Value);
                            cmd.Parameters.AddWithValue("@codProduto", dgvDetalhes.Rows[i].Cells[3].Value);
                            cmd.Parameters.AddWithValue("@codOrginal", dgvDetalhes.Rows[i].Cells[4].Value);
                            cmd.Parameters.AddWithValue("@valorDesconto", dgvDetalhes.Rows[i].Cells[8].Value);
                            cmd.Parameters.AddWithValue("@Servico", dgvDetalhes.Rows[i].Cells[0].Value);
                            cmd.Parameters.AddWithValue("@Dano", dgvDetalhes.Rows[i].Cells[1].Value);
                            cmd.Parameters.AddWithValue("@hsPintura", dgvDetalhes.Rows[i].Cells[10].Value);
                            cmd.Parameters.AddWithValue("@hsServico", dgvDetalhes.Rows[i].Cells[9].Value);
                            cmd.Parameters.AddWithValue("@PrecoTotal", dgvDetalhes.Rows[i].Cells[7].Value);
                            cmd.Parameters.AddWithValue("@Autorizacao", dgvDetalhes.Rows[i].Cells[11].Value);
                            cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();
                        }
                    }
                    //Fecho conexão
                    conn.Close();
                }
            }

    • Sugerido como Resposta Raniel Nogueira quarta-feira, 2 de julho de 2014 18:15
    quarta-feira, 2 de julho de 2014 18:15
  • Obrigado pela resposta !

    Você teria um exemplo de como adicionar itens nesse grid de forma dinâmica.

    quarta-feira, 2 de julho de 2014 18:21
  • Obrigado pela resposta !

    Você teria um exemplo de como adicionar itens nesse grid de forma dinâmica.


    Me diga como gostaria de usar de forma dinâmica? por favor se tiver sido útil marcar como resposta.
    quarta-feira, 2 de julho de 2014 18:25
  • Exemplo, conforme vou selecionando o produto e o subproduto no combo e clico em adicionar ele vai para minha grid através de Ajax, ou Jquery.

    quarta-feira, 2 de julho de 2014 18:29
  • Exemplo, conforme vou selecionando o produto e o subproduto no combo e clico em adicionar ele vai para minha grid através de Ajax, ou Jquery.

    Olha esse exemplo achei interessante:Utilizando gridview Dinâmico

    quarta-feira, 2 de julho de 2014 18:39
  • Diego, tudo bem? pelo o que entendi, se trata de uma listagem de dados simples, não é?

    como está usando ASP.NET MVC, usa o Scaffold para exibir em tabela os produtos...

    Quando você for listar, usa uma View tipada, se for necessário faz uma ViewModel que contempla Produto e subproduto...quando for inserir, você joga essa classe Produto numa Action, estando no servidor você fragmenta o Produto como quiser...

    http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-basic-crud-functionality-with-the-entity-framework-in-asp-net-mvc-application

    http://www.macoratti.net/14/04/mvc_crud.htm

    Se tiver dúvida sobre ViewModel, aqui está:

    http://eduardopires.net.br/2013/08/asp-net-mvc-view-model-pattern-quando-e-como-utilizar/

    Vê o que acha, abraço!



    quarta-feira, 2 de julho de 2014 19:43
  • Boa tarde Diego !

    Obrigado pela resposta, estava fazendo exatamente usando ViewModel, porém estou com problema de passar para a View.

    Criei uma view Mode da lista de produtos para exibição no grid;

     public class ListaProdutoViewModel
        {
            public IEnumerable Produto { get; set; }
            public IEnumerable Sub_Produto { get; set; }
        }

    Tenho um método que transforma o DataReader em uma lista de objeto, estou estanciando as classes produto e subproduto e depois estou populando a view classe.

     public ListaProdutoViewModel TransformaReaderEmListaDeObjeto(SqlDataReader reader)
            {
                var Contr_Prod = new List<Produto>();
    
                while (reader.Read())
                {
                    var temObjeto = new Produto()
                    {
                        PROD_CODIGO = reader["PROD_CODIGO"].ToString(),
                        PROD_DESCRICAO = reader["PROD_DESCRICAO"].ToString(),
                    
                    };
                    Contr_Prod.Add(temObjeto);
                }
                reader.Close();
          
               var Contr_SubProd = new List<Sub_Produto>();
                while(reader.Read())
                {
                    var temObjeto = new Sub_Produto()
                    {
                        SUBPROD_DESCRICAO = reader["SUBPROD_DESCRICAO"].ToString(),
                    };
                    Contr_SubProd.Add(temObjeto);
                }
                reader.Close();
    
                var contrato = new ListaProdutoViewModel();
    
                    {
                        contrato.Produto = Contr_Prod;
                        contrato.Sub_Produto = Contr_SubProd;
    
                    };
                           
                return contrato;
            }
        }

    Porém na view não consigo ter acesso aos atributos das classes, no momento de puxar na view como o caso abaixo em negrito.

      @foreach (var item in Model.Produto)
            {
                <tr>
                    <td>
                       @item.PROD_CODIGO

    quinta-feira, 3 de julho de 2014 18:52
  • Fala Diego, beleza?

    Tenta assim, já já to em casa e testo, é que no cliente que estou hoje não tem como usar MVC kkkk

    logo no inicio da View poe assim:

    @model IEnumerable<MvcApp.Models.ViewModelExemplo> 

    e no foreach, faz assim como nesse link:

    http://felipecvlh.blogspot.com.br/p/iniciando-com-aspnet-mvc-parte-5.html

    Posta aí os resultados...abraço!!!

    quinta-feira, 3 de julho de 2014 19:32
  • Fala chará beleza !

    Minha view já está tipada 

    @model IEnumerable<ProjetoZ1.Classes.ViewModel.ListaProdutoViewModel>

    Porém mesmo usando o Helper não consigo ter acesso. Achei uns bugs no algoritmo vou ajustar vai que isso está influenciando. Posto os resultados.

    Abraço !

    quinta-feira, 3 de julho de 2014 19:40
  • Bom dia !

    Refatorei os código porém mesmo assim, na view tipada não consigo jogar os valores:

    Segue abaixo meu método que retorna a lista de com os dados.

         public ListaProdutoViewModel TransformaReaderEmListaDeObjeto(SqlDataReader reader)
            {
                var Contr_Prod = new List<Produto>();
                var Contr_SubProd = new List<Sub_Produto>();
                
                while (reader.Read())
                {
                    var temObjeto = new Produto()
                    {
                        PROD_CODIGO = reader["PROD_CODIGO"].ToString(),
                        PROD_DESCRICAO = reader["PROD_DESCRICAO"].ToString(),
                    
                    };
                    Contr_Prod.Add(temObjeto);
    
                    var temObjeto2 = new Sub_Produto()
                    {
                        SUBPROD_DESCRICAO = reader["SUBPROD_DESCRICAO"].ToString(),
                    };
                    Contr_SubProd.Add(temObjeto2);  
                }
    
                reader.Close();
    
                var contrato = new ListaProdutoViewModel();
                {
                    contrato.produto = Contr_Prod;
                    contrato.sub_Produto = Contr_SubProd;
                }
               
                
                return contrato;
            }


    No controller estou passando para a view:

    var ViewGridProduto = Contrato_ProdutoAplicacaoConstrutor.Contrato_ProdutoADO();
                var listaGridProduto = ViewGridProduto.ListarPorID("0005");
    
                return View(listaGridProduto);

    Porém na View o máximo que consigo puxar é o atributo produto, só que preciso pegar o atributo codigo que está dentro de produto.

         @foreach(var item in Model)
                    {
                <tr>
                    <td>
                        @item.produto
                     </td>

    Obrigado !

    sexta-feira, 4 de julho de 2014 13:40
  • Diego...faz um teste, troca sua linha 

    <td>

    @item.produto

    </td>

    por 

    <td>
                                @Html.DisplayFor(modelItem => item.produto)
                            </td>

    e assim nos demais...

    posta depois os resultados...

    abraço!!!

    • Marcado como Resposta Diego Bexa sexta-feira, 4 de julho de 2014 15:01
    sexta-feira, 4 de julho de 2014 14:05
  • Bom dia Diego !

    O meu problema está para popular uma Ienumerable de duas classes (Produto, SubProduto) para exibição na view, no caso criei essa view mode: 

     public class ListaProdutoViewModel
        {
            public IEnumerable<Produto> produto { get; set;}
            public IEnumerable<Sub_Produto> sub_produto { get; set;}
        }

    Como faço para jogar o resultado de uma consulta nesse Model ?

    sexta-feira, 4 de julho de 2014 14:31
  • Consegui resolver, na verdade o problema realmente estava como eu estava buscando essas informações, e na view o tipo dela tirei o Ienumerable.

    @model ProjetoZ1.Classes.ViewModel.ListaProdutoViewModel
    Obrigado !

    sexta-feira, 4 de julho de 2014 15:01