Usuário com melhor resposta
salvar varios registros da listview em uma unica linha (C#+SQL Server)

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
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
- Editado André SeccoMVP quarta-feira, 23 de novembro de 2016 22:14
- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 25 de novembro de 2016 09:02
- Marcado como Resposta Robson William SilvaModerator sexta-feira, 25 de novembro de 2016 12:17
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
- Editado André SeccoMVP quarta-feira, 23 de novembro de 2016 22:14
- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 25 de novembro de 2016 09:02
- Marcado como Resposta Robson William SilvaModerator sexta-feira, 25 de novembro de 2016 12:17
-