Carcleo 4 Denunciar post Postado Dezembro 4, 2008 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 SubBom, 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("preco") = preco.Text rowNew("quantidade") = qtde.Text rowNew("subtotal") = preco.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 SubE 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,preco,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,preco,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.Como posso resolver isso? Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Dezembro 5, 2008 Movido Plataforma .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET » Windows Applications Tem como dar uma filtrada no problema? Espero que entenda como um conselho, quando um membro posto muito código e muito textos dificilmente alguém presta atenção e fica lendo com calma, afinal todos nós temos obrigações. Então peço que poste somente a parte importante da sua dúvida. http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 5, 2008 Tem razão me desculpe mais essa vez. Vou tentar ser mais específico ok? Bom, os problemas anteriores consegui matar porem, sempre resta algum restolho né? Bom, estou trabalhando com inserção de registros (ítens dos pedidos) usando datatables temporarios (tabelas criadas dentro do dataset e não ligadas a Bancos de dados). Para exibir esses ítens dos pedidos, estou usando uma DataGridView ligada por datasource à essa tabela temporia. O problema que ta acontecendeo agora é que, quando vou alterar os ítens dos pedido de um pedido, e deleto linhas na datagrid,não sei como fazer para que, ao alterar umaq determinada linha na datagrid delete exatamente essa linha na datable temporaria. Estou usando o código abaixo mas ta dando o seguinte erro na hora de salvar as alterações: "Informações sobre a linha excluída não podem ser acessadas através da linha." Mas esse erro é só se eu deletar linhas, se eu só incluir linhas não da erro: Private Sub Excluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Excluir.Click 'a propriedade SelectionMode deve ser igual a FullRowSelect para deletar linhas 'verifica se a linha a ser excluida é valida Dim registro As DataRowView = TryCast(DGWPedidos.CurrentRow.DataBoundItem, DataRowView) ' Existe algum registro selecionado? If registro IsNot Nothing Then ' Sim... Então apaga;) registro.Delete() End If End Sub Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Dezembro 7, 2008 Este valor --> DGWPedidos.CurrentRow.DataBoundItem Esta sendo passado o que? Qual valor esta recebendo? Você clica no seu registro antes de excluir? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 10, 2008 Olha Não! Eu temnho a DataGridView ligado a tabela temporaria (datatable) e quano cliko em uma linha na DatagridView, o que eu espero é que o código delete, la nos registros do datatable, o registro correspondente àquela linha selecionada na DataGridView. Eu não estou conseguindo fazer isso. O Interessande é que se excluir um linha apenas, o erro não ocorre. Mas, se excluir varias linhas fora de seuqncia no DataGridView tipo a 1ª, a 4ª, a 6ª e inluir mais linhas nesse intervalo, aí ele da o erro. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 11, 2008 É problema para veterano ajudar resolver: Bom, estou trabalhando com inserção de registros (ítens dos pedidos) usando datatables temporarios (tabelas criadas dentro do dataset e não ligadas a Bancos de dados). Para exibir esses ítens dos pedidos, estou usando uma DataGridView ligada por datasource à essa tabela temporia. O problema que ta acontecendeo agora é que, quando vou INCLUIR OU EXCLUIR os ítens dos pedido de um pedido que ja apareceram na DataGridView no momento em que eu abri o formulario ocorre tudo cero inclusive quando tento incluir linhas novas. Mas, se exluir qualquer uma dessas linhas novas ele ja não acha a correspondencia entre datagridviewrow e a datarow. Estou usando o código abaixo mas ta dando o seguinte erro na hora de salvar as alterações: "Informações sobre a linha excluída não podem ser acessadas através da linha." Mas esse erro é só se eu deletar linhas que forma inseridas e que por ventura tenha desistido delas: Private Sub Excluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Excluir.Click 'a propriedade SelectionMode deve ser igual a FullRowSelect para deletar linhas 'verifica se a linha a ser excluida é valida Dim registro As DataRowView = TryCast(DGWPedidos.CurrentRow.DataBoundItem, DataRowView) ' Existe algum registro selecionado? If registro IsNot Nothing Then ' Sim... Então apaga;) registro.Delete() End If End Sub Código para inserir: 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("preco") = preco.Text rowNew("quantidade") = qtde.Text rowNew("subtotal") = preco.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 Compartilhar este post Link para o post Compartilhar em outros sites