persebi que a datagridview é somente para exibição de dados que estão no datatable e não para usar suas colunas para salva-las no banco pois assim, quando gravo as colunas da DataGridView no banco sempre irá uma linha toda em branco (a última) certo?
assim,
Estou fazendo dessa forma.
Uso um dataset ligado ao MySql tabela detalhespedidos (atraves de datasource) para (exibir) os detalhes do pedido atraves da datagridview.
depois, quando cliko no botão "editar pedido",
Depois, crio um dataset com uma tabela temporaria (detalhespedidos) igualzinha a tabela que esta la no mysql e entrego os valores dela para a tabela temporaria que esta no dataset criado e depois faço
DGWPeidos.datasource=Nothing e depois entrego a DataGridView ao datasouce da tabela temporaria. Desta forma, desconecto os a DataGridView do banco MySql mas não perco os detalhes dos pedidos que estão na DataGridView.
Assim:
Private Sub Atualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Atualizar.Click
If Atualizar.Text = "Atualizar" Then
habilita()
entrega_item_item()
DGWPedidos.DataSource = Nothing
DGWPedidos.DataSource = ds_itens_temp.Tables(0).DefaultView
Novo.Enabled = False
Primeiro.Enabled = False
Proximo.Enabled = False
Anterior.Enabled = False
Ultimo.Enabled = False
Eliminar.Enabled = False
Encerrar.Text = "Cancela"
Atualizar.Text = "Salvar"
bcliente.Enabled = True
bproduto.Enabled = True
Incluir.Enabled = True
Excluir.Enabled = True
qtde.Enabled = True
cliente.Focus()
codigoped.Enabled = False
codigoped.Visible = True
LabelCodigoPed.Visible = True
ElseIf Atualizar.Text = "Salvar" Then
codigoped.Enabled = False
If registropedidos < 0 OrElse registropedidos > dt.Rows.Count - 1 Then Exit Sub
Dim dre As DataRow = dt.Rows(registropedidos)
atualizarRegistro(dre)
Atualizar.Text = "Atualizar"
Encerrar.Text = "Encerrar"
Novo.Enabled = True
Eliminar.Enabled = True
desabilita()
Primeiro.Enabled = True
Proximo.Enabled = True
Anterior.Enabled = True
Ultimo.Enabled = True
End If
End Sub
Bom, deu para perceber que quando cliko no botão atualizar ele troca o texto para salvar que depois de likado ira salvar as alterações.
Eis a procidure Que entrega os ítens do MySql para a tabela temporaria
Public Sub entrega_item_item()
Dim Sqlitens As String = "Select * from detalhespedidos where pedidoID=" & codigoped.Text
ds_itens_temp = accDb.ExecuteDSTEMP(Sqlitens)
For Each linha As DataRow In ds_itens.Tables(0).Rows
ds_itens_temp.Tables(0).Rows.Add(linha(0), linha(1), linha(2), linha(3), linha(4), linha(5), linha(6))
Next linha
End Sub
Eis o código que estou usando para incluir ítens e remover ítens (alterar) do pedido:
Private Sub Incluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Incluir.Click
'a propriedade SelectionMode deve ser igual a FullRowSelect para deletar linhas
If cliente.Text = String.Empty Then
MsgBox("Escolha o clientes...")
bcliente_Click(Nothing, Nothing)
Exit Sub
ElseIf produto.Text = String.Empty Then
MsgBox("Escolha o produto.")
bproduto_Click(Nothing, Nothing)
Exit Sub
ElseIf qtde.Text = String.Empty Then
MsgBox("Informe a quantidade requerida...")
qtde.Focus()
Exit Sub
End If
Dim rowNew As DataRow = ds_itens_temp.Tables(0).NewRow
rowNew("pedidoID") = codigoped.Text
rowNew("produtoID") = codigoprod.Text
rowNew("unidade") = unidade.Text
rowNew("descricao") = produto.Text
rowNew("preço") = preço.Text
rowNew("quantidade") = qtde.Text
rowNew("subtotal") = preço.Text * qtde.Text
ds_itens_temp.Tables(0).Rows.Add(rowNew)
ds_itens_temp.AcceptChanges()
total.Text = 0.0
For Each linha As DataGridViewRow In DGWPedidos.Rows
total.Text += linha.Cells(6).Value
total.Text = FormatCurrency(total.Text, "0.00")
Next linha
End Sub
E por fim o código que salva as alterações que estão na tabela temporarias na tabela do Banco MySql
Private Sub atualizarRegistro(ByVal dr As DataRow)
Dim sqlpedidos As String = "UPDATE " & TabelaPedidos & " SET clienteID='" & codigocli.Text & "' where pedidoID='" & dr("pedidoID") & "'"
Dim sqlitensdeletaitens As String = "delete from " & TabelaDetalhesPedidos & " where pedidoID='" & dr("pedidoID") & "'"
accDb.ExecuteDS(sqlitensdeletaitens, TabelaDetalhesPedidos)
accDb.ExecuteDS(sqlpedidos, TabelaPedidos)
For Each linha As DataRow In ds_itens_temp.Tables(0).Rows
Dim sqlitens As String = "INSERT INTO " & TabelaDetalhesPedidos & " (pedidoID,produtoID,unidade,descricao,preço,quantidade,subtotal) VALUES ('" & ds_itens_temp.Tables(0).Rows(I).Item(0) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(1) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(2) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(3) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(4) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(5) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(6) & "')"
accDb.ExecuteDS(sqlitens, TabelaDetalhesPedidos)
I = I + 1
Next linha
Try
MessageBox.Show("Pedido atualizado com sucesso.")
DGWPedidos.DataSource = Nothing
CarregaPagina() ' função que entrega ao DataGridWiew o datasource do banco MySql de novo
Catch ex As Exception
MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message)
End Try
End Sub
Bom tudo funciona correto, porem, quando recebo do programa a informaçao de que a alteração foi efetuada com sucesso, dai, se tento alterar outro pedido, todos os passos da certo mas quando vou salvar no banco as alterações ele para a execução na linha de sql abaixo:
[code]
Private Sub atualizarRegistro(ByVal dr As DataRow)
Dim sqlpedidos As String = "UPDATE " & TabelaPedidos & " SET clienteID='" & codigocli.Text & "' where pedidoID='" & dr("pedidoID") & "'"
Dim sqlitensdeletaitens As String = "delete from " & TabelaDetalhesPedidos & " where pedidoID='" & dr("pedidoID") & "'"
accDb.ExecuteDS(sqlitensdeletaitens, TabelaDetalhesPedidos)
accDb.ExecuteDS(sqlpedidos, TabelaPedidos)
For Each linha As DataRow In ds_itens_temp.Tables(0).Rows
'para a execução nessa sql
Dim sqlitens As String = "INSERT INTO " & TabelaDetalhesPedidos & " (pedidoID,produtoID,unidade,descricao,preço,quantidade,subtotal) VALUES ('" & ds_itens_temp.Tables(0).Rows(I).Item(0) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(1) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(2) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(3) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(4) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(5) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(6) & "')"
'para a execução nessa sql
accDb.ExecuteDS(sqlitens, TabelaDetalhesPedidos)
I = I + 1
Next linha
Try
MessageBox.Show("Pedido atualizado com sucesso.")
DGWPedidos.DataSource = Nothing
CarregaPagina() ' função que entrega ao DataGridWiew o datasource do banco MySql de novo
Catch ex As Exception
MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message)
End Try
End Sub
e da erro dizendo:
Não há linha na posição 6(último ítem dos ítens na gridview).
O interessante de tudo é que, se eu alterar o primeiro o pedido, e da cerrto, e fechar o formulario e abrir de novo para alterar o outro pedido, aoi da certo mas se eu não fechar o form e alterar na sequencia ai da o erro.
Pergunta
Carlos Rocha
persebi que a datagridview é somente para exibição de dados que estão no datatable e não para usar suas colunas para salva-las no banco pois assim, quando gravo as colunas da DataGridView no banco sempre irá uma linha toda em branco (a última) certo?
assim,
Estou fazendo dessa forma.
Uso um dataset ligado ao MySql tabela detalhespedidos (atraves de datasource) para (exibir) os detalhes do pedido atraves da datagridview.
depois, quando cliko no botão "editar pedido",
Depois, crio um dataset com uma tabela temporaria (detalhespedidos) igualzinha a tabela que esta la no mysql e entrego os valores dela para a tabela temporaria que esta no dataset criado e depois faço
DGWPeidos.datasource=Nothing e depois entrego a DataGridView ao datasouce da tabela temporaria. Desta forma, desconecto os a DataGridView do banco MySql mas não perco os detalhes dos pedidos que estão na DataGridView.
Assim:
Bom, deu para perceber que quando cliko no botão atualizar ele troca o texto para salvar que depois de likado ira salvar as alterações. Eis a procidure Que entrega os ítens do MySql para a tabela temporaria Eis o código que estou usando para incluir ítens e remover ítens (alterar) do pedido: E por fim o código que salva as alterações que estão na tabela temporarias na tabela do Banco MySql Bom tudo funciona correto, porem, quando recebo do programa a informaçao de que a alteração foi efetuada com sucesso, dai, se tento alterar outro pedido, todos os passos da certo mas quando vou salvar no banco as alterações ele para a execução na linha de sql abaixo: e da erro dizendo:O interessante de tudo é que, se eu alterar o primeiro o pedido, e da cerrto, e fechar o formulario e abrir de novo para alterar o outro pedido, aoi da certo mas se eu não fechar o form e alterar na sequencia ai da o erro.
Como posso resolver isso?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.