none
salvar varios registros da listview em uma unica linha (C#+SQL Server) RRS feed

  • Pergunta

  • Boa noite galera, estou com um problema e preciso da vossa ajuda, ja pesquisei e não encontro solução.

    É o seguinte estou a criar um sistema de venda para uma loja, estou usando a listview para registrar a lista de compras feita pelos clientes.

    Preciso de salvar todos os dados que estão registrados na listview para o sql server mas numa linha só ex:


    todos os dados do campo descrição,qtd,preco,total  numa unica linha ex:

    ________________________________________________________________________

    Descricao         |    Qtd   |  Preco  |       Total    |

    _________________________________________________________________________

    htc, Samsung    |  2,      |  15000 |   300000, |

    Galaxy S7,        |   1,      |  25000 |   250000,  |

    BlackBerry z10 |    2,     |  75000 |  150000    |

    _________________________________________________________________________

    este é o meu codigo para salvar os dados:

    1º Classe publica

     
     public int InserirBanco(string produto,string num, string valor, string pagamento)
            {
                int res = 0;
                using (SqlConnection conn = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=lojateste;Data Source=.\\"))
                {
                    conn.Open();
                    //Query de inserção no banco exemplo
                    string _query = "insert into tb_venda(produtos,qtd,preco,total) values (@produtos,@qtd,@preco,@pagamento)";
                     
                    //Instancia do SqlCommand, passando query e conexao
                    //como parametros atraves do contrustor da propia classe
                    SqlCommand cmd = new SqlCommand(_query, conn);
    
                    //Adicionando parametros
                    cmd.Parameters.Add("@produtos",SqlDbType.VarChar).Value= produto;
                    cmd.Parameters.Add("@qtd", SqlDbType.VarChar).Value = num;
                    cmd.Parameters.Add("@preco", SqlDbType.VarChar).Value = valor;
                    cmd.Parameters.Add("@pagamento", SqlDbType.VarChar).Value =pagamento;
                    cmd.CommandType= CommandType.Text;
                    res= cmd.ExecuteNonQuery();
                    conn.Close();
                    return res;
              
                }
            }

    2º Botão Inserir tentei este codigo no botão mas não está funcionado esta a salvar os dados mas linhas diferentes cada registros com id diferente

    private void picimpres2_Click(object sender, EventArgs e)
            {
              
                //metodo de Inserção na Base de Dados
                int res = 0;
                    string produto = String.Empty;
                    string num = String.Empty;
                    string valor = String.Empty;
                    string pagamento = String.Empty;
                //Percorrendo listbox e gravando no banco de dados
                for (int i = 0; i < listView1.Items.Count; i++)
                {
                
                    //Passando valor atual do listbox
                    if (listView1.Items.Count - 1 != i)
                    {
                      
                        produto += listView1.Items[i].ToString() + ",";
                        num += listView1.Items[i].ToString() + ",";
                        valor += listView1.Items[i].ToString() + ",";
                        pagamento += listView1.Items[i].ToString() + ",";
                    }
                    else
                    {
                        produto = listView1.Items[i].ToString();
                        num = listView1.Items[i].ToString();
                        valor = listView1.Items[i].ToString();
                        pagamento = listView1.Items[i].ToString();
    
                    }
                    res=InserirBanco(listView1.Items[i].SubItems[0].Text, listView1.Items[i].SubItems[1].Text, listView1.Items[i].SubItems[2].Text, listView1.Items[i].SubItems[3].Text);
                }
            }

    Antes de mais agradeço pela atenção







    • Editado GILBLAZER quarta-feira, 23 de novembro de 2016 22:05
    quarta-feira, 23 de novembro de 2016 21:58

Respostas

  • Olá,

    Tem certeza que não está utilizando DataGridView? É o mais recomendado para o seu caso.

    O exemplo abaixo é com DataGridView (Estou concatenando os dados e separando as colunas por "|", mas pode mudar se desejar):

            public void Processar()
            {    
                string linhaConcatenada = string.Empty;
                foreach (DataGridViewRow linha in dataGridView1.Rows)
                {
                    linhaConcatenada = string.Empty;
                    foreach (DataGridViewCell colunas in linha.Cells)
                        linhaConcatenada += colunas.Value + "|";
    
                    // método que insere essa linha no banco de dados
                    Inserir(linhaConcatenada);
                }
            }
    
            public void Inserir(string linha)
            {
                String query = "INSERT INTO SUA_TABELA (campo) VALUES (@campo)";
                using (SqlConnection connection = new SqlConnection("SUA_CONNECTION_STRING"))
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    command.Parameters.Add("@campo", SqlDbType.VarChar).Value = linha;
                    
                    connection.Open();
                    command.ExecuteNonQuery();
                    connection.Close();
                }
            }

    Caso deseje mesmo fazer com ListView, basta mudar o modo como percorre os dados no primeiro método, mas a concatenação e inserção permanece igual

    OBS: No método Inserir() eu coloquei alguns dados de exemplo apenas como a connection string, nome e campo da tabela. É necessário adaptar ao seu caso.

    Valeu!


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

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



    quarta-feira, 23 de novembro de 2016 22:12

Todas as Respostas

  • Olá,

    Tem certeza que não está utilizando DataGridView? É o mais recomendado para o seu caso.

    O exemplo abaixo é com DataGridView (Estou concatenando os dados e separando as colunas por "|", mas pode mudar se desejar):

            public void Processar()
            {    
                string linhaConcatenada = string.Empty;
                foreach (DataGridViewRow linha in dataGridView1.Rows)
                {
                    linhaConcatenada = string.Empty;
                    foreach (DataGridViewCell colunas in linha.Cells)
                        linhaConcatenada += colunas.Value + "|";
    
                    // método que insere essa linha no banco de dados
                    Inserir(linhaConcatenada);
                }
            }
    
            public void Inserir(string linha)
            {
                String query = "INSERT INTO SUA_TABELA (campo) VALUES (@campo)";
                using (SqlConnection connection = new SqlConnection("SUA_CONNECTION_STRING"))
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    command.Parameters.Add("@campo", SqlDbType.VarChar).Value = linha;
                    
                    connection.Open();
                    command.ExecuteNonQuery();
                    connection.Close();
                }
            }

    Caso deseje mesmo fazer com ListView, basta mudar o modo como percorre os dados no primeiro método, mas a concatenação e inserção permanece igual

    OBS: No método Inserir() eu coloquei alguns dados de exemplo apenas como a connection string, nome e campo da tabela. É necessário adaptar ao seu caso.

    Valeu!


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

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



    quarta-feira, 23 de novembro de 2016 22:12
  • vlw
    domingo, 5 de março de 2017 09:35