Ir para conteúdo
Fórum Script Brasil

Carlos Rocha

Membros
  • Total de itens

    1.300
  • Registro em

  • Última visita

Tudo que Carlos Rocha postou

  1. Doce ilusão foi a minha. Quando faço: cpf_cnpj.DataBindings.Clear() cpf_cnpj.Mask = "00,000,000/0000-00" cpf_cnpj.DataBindings.Add("Text", ds.Tables(0), "cpf_cnpj" Na primeira linha, cpf_cnpj.DataBindings.Clear(), eu zero o databinding e o código só pega o CPF ou CNPJ do primeiro registro toda hora. Continua a procura por um código para colocar mascara na textbox e a função para validar campos não prenchidos no formulario com mensagem de cada uma. Se alguém puder ajudar!
  2. Doce ilusão foi a minha. Quando faço: cpf_cnpj.DataBindings.Clear() cpf_cnpj.Mask = "00,000,000/0000-00" cpf_cnpj.DataBindings.Add("Text", ds.Tables(0), "cpf_cnpj" Na primeira linha, cpf_cnpj.DataBindings.Clear(), eu zero o databinding e o código só pega o CPF ou CNPJ do primeiro registro toda hora. Continua a procura por um código para colocar mascara na textbox e a função para validar campos não prenchidos no formulario com mensagem de cada uma. Se alguém puder ajudar!
  3. Agora só falta criar uma função para validar campos o fomulario como nome vazio, endereço, telefone e suas respectivas mensagens. Como faz isso?
  4. Dim d As Double ' Aqui vem a coluna com os dados, no meu caso é a coluna 1 If e.ColumnIndex = 1 Then ' Vejo se tem algo preenchido e eu estou convertendo ' para Double para aplicar uma máscara numérica If e.Value IsNot Nothing AndAlso _ Double.TryParse(e.Value.ToString(), d) Then Console.WriteLine(e.Value.ToString().Length) ' Se for até 11 caracteres, considero CPF If e.Value.ToString().Length <= 11 Then e.Value = d.ToString("###'.'###'.'###-##") ' De 12 a 14, CNPJ ElseIf e.Value.ToString().Length > 11 AndAlso _ e.Value.ToString().Length <= 14 Then e.Value = d.ToString("##'.'###'.'###/####-##") End If End If End If Agora só falta criar uma função para validar campos o fomulario como nome vazio, endereço, telefone e suas respectivas mensagens. Como faz isso?
  5. Bom resolvi o problema. na hora da exibição fica assim: If dr("tipo") = "f" Then tipo1.Checked = True tipo2.Checked = False cpf_cnpj.DataBindings.Clear() cpf_cnpj.Mask = "000,000,000-00" cpf_cnpj.DataBindings.Add("Text", ds.Tables(0), "cpf_cnpj") End If If dr("tipo") = "j" Then tipo2.Checked = True tipo1.Checked = False cpf_cnpj.DataBindings.Clear() cpf_cnpj.Mask = "00,000,000/0000-00" cpf_cnpj.DataBindings.Add("Text", ds.Tables(0), "cpf_cnpj") End If e na hora de inserir um novo registro, fica assim: Private Sub tipo1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tipo1.CheckedChanged If tipo1.Checked = True Then IE.Visible = False LabelIE.Visible = False tipo2.Checked = False cpf_cnpj.Visible = True Nome.Visible = True LabelNome.Visible = True LabelCPF.Visible = True LabelNome.Text = "Nome" LabelCPF.Text = "CPF:" cpf_cnpj.ReadOnly = False cpf_cnpj.DataBindings.Clear() cpf_cnpj.Mask = "000,000,000-00" End If End Sub Private Sub tipo2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tipo2.CheckedChanged If tipo2.Checked = True Then IE.Visible = True LabelIE.Visible = True tipo1.Checked = False cpf_cnpj.Visible = True Nome.Visible = True LabelNome.Visible = True LabelCPF.Visible = True LabelNome.Text = "Razão Social" LabelCPF.Text = "CNPJ: " cpf_cnpj.ReadOnly = False cpf_cnpj.DataBindings.Clear() cpf_cnpj.Mask = "00,000,000/0000-00" End If ou seja, só tirar a atribuição de valor. Agora o problema é similar. tenho o código abixo para colocar a mascara na datagridview só não sei em que evento colocar: For Each linha As DataGridViewRow In DGWClientes.Rows If DGWClientes.Columns.Item(10).ToString = "f" Then DGWClientes.Columns.Item(1).DefaultCellStyle.Format = "###,###,###-##" End If If DGWClientes.Columns.Item(10).ToString = "j" Then DGWClientes.Columns.Item(1).DefaultCellStyle.Format = "##,###,###/####-##" End If Next
  6. Ola pessoal. Teno um código para exibir resutados de uma consulta ao MySql em textbox's. Acontece que um dos campos do formulario, o que mostrará o CPF, tambem poderá mostrar CNPJ dependendo do valor que chega do campo "tipo" do MySql na tabela de clientes(se f ou j {Física ou Juridica}). Esse é o código que estpou usando: Private Sub exibirDados(ByVal m As Integer) Dim i As Integer = dt.Rows.Count - 1 If m < 0 OrElse i < 0 Then Exit Sub dr = dt.Rows(m) Codigo.Text = dr("clienteID") cpf_cnpj.Text = dr("cpf_cnpj") cpf_cnpj2.Text = dr("cpf_cnpj") Nome.Text = dr("nome") Endereco.Text = dr("endereco") Bairro.Text = dr("bairro") Cidade.Text = dr("cidade") Estado.Text = dr("estado") Email.Text = dr("email") data.Text = dr("data") If dr("tipo") = "f" Then tipo1.Checked = True tipo2.Checked = False End If If dr("tipo") = "j" Then tipo2.Checked = True tipo1.Checked = False End If Telefone.Text = dr("telefone") IE.Text = dr("ie") End Sub Acontece que o ampo que mostra o CPF ou CNPJ, é uma maskedtextbox pois não consegui uma rotina para colocar mascara na textbox. Acontece que, para fin de textm puz tambem no form, uma textbox ao lado da maskedtextbox recebendo o mesmo valor que ela para verificar o erro e percebi que, a makedtexbox as vezes mostra a mascara de cpf ou cnpj certo porem as vezes mostra apenas 11 dos 14 digitos do CNPJ e a textbox mostra os 14 digitos certinho. Mas, se eu insistir e clikar novamente, por exemplo, no Botao primeiro da navegação entre registros, ai a maskedtextbox mostra correto a mascara e o todos os numeros do CNPJ. O grilo que esta na minha cabeça é por que as vezes mostra só 11 digitos e não 5 ou 6 se 11 é a quantidade de dígitos de um CPF. O que eu preciso: 1) Ou uma forma de colocar mascar na textbox ou 2) como resolver esse problema. O código da navegação entre os registro (em botões): Private Sub Primeiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Primeiro.Click registro = 0 exibirDados(registro) End Sub Private Sub Anterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Anterior.Click registro = registro - 1 If registro < 0 Then registro = 0 exibirDados(registro) End Sub Private Sub Proximo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Proximo.Click Dim i As Integer = dt.Rows.Count - 1 registro = registro + 1 If registro > i Then registro = i exibirDados(registro) End Sub Private Sub Ultimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ultimo.Click registro = dt.Rows.Count - 1 exibirDados(registro) End Sub
  7. alguém pode me ajudar. Como fazer uma função validar(). O problema é o retorno da mensagem para cada campo vazio!
  8. Ok. Ainda sou meio (Full) cru em vb.net e ainda estou tendo dificulkdades. nesse caso: total.Text -= linha.Cells(6).Value do sinal negativo. Como resolveria? Fiz uma gabiarra e multipliquei oi resultado por -1 para dar positio mas não achei nada profissional. sobre a função valida como faria o retorno de valor? Se puder dar umexemplo agradeceria:
  9. Ta acontecendo um negócio extranho no formulario de pedidos: O produto custa: 45,33 * 5 peças ta dando dízima periódica: 45,33 * 5 = 226,64999999999998. Que é isso? Outra coisa: Tenho o código abaixo que só permite numeros, virgula e backspace. Só que só pode aceitar uma vírgula na textbox. Como adaptar isso ao código: Private Sub preco_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles preço.KeyPress If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "," Then e.Handled = True End If End Sub
  10. Pessoal! Boa Tarde! Com esse codigo eu insiro ítens na DataGridView e contabilizo os totais: 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 com esse desisto e excluo a linha excluda na Datagridview e subtraio o valor da linha excluida do total 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 ' Aqui apaga a linha na datagrid;) registro.Delete() ' E aqui apaga a linha na datatable, ou seja, o dataset aceita as alterações;) ds_itens_temp.Tables(0).AcceptChanges() End If 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 Mas não da certo, esta dando resultado negativo Como faço agora quando quero excluir uma linha na DataGridView e quero tirar o valor dela do total? Da forma como apresentei até da certo mas não estou entendendo por que o numero sai negantivo. Por exemplo: os ítens todos somam R$315,00, dai retiro um de R$10,00 o resultado fica -R$305,00 e não +R$305,00. Bom outra ajuda que preciso é o seguinte: Tenho uma public sub valida() end sub Co validações de formulario, quando chamo a valida() até executa a validação mas não executa a parada do códo com exit sub mas, se eu pegar o conteudo da valida() e colocar no lugar onde ela é chamada ai da cero como faço para usar a public sub valida()? Tipo existe isso? if valida() = false then exit sub
  11. To com esse mesmo problema. Será que alguém poderá nos ajudar? Obs.: Não serve o Chapolim Colorado (Risos)
  12. Sabe,a tarde resolvi o problema assim: Form startup = Form de Login Evento MouseClosed = my.Forms.formlogin.close Agora to com um outro 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 já 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 já 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("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
  13. Mas, como fazer isso? Da uma ideia!
  14. Ok, esse procedimento eu já havia tentado de outra fom mas o problema é como manter o Form MDI fechado até que o form de login faça a autenticação?
  15. Bom pessoal. Tenho minha aplicação normal com um form MDI como "pai de todos". Ai, decidi por um form de login. E, para o form de login abrir antes da aplicação(form MDI), alterei as propriedades da aplicação (), a proriedade startup para abrir com o form de logim. O problema é que parece que quando faço isso, o orm logim passa a sero form principal da aplicação de forma tal que só fechando ele se fecha (encerra) a aplicação. fechando o form principal não é possivel encerrar a aplicação. Pergunto: Como faço para, mantendo tudo como esta, alterar o form de de fechamento da aplicação novamente para o form pincipal?
  16. 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
  17. 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. Como posso resolver isso?
  18. Sabe, descobri uma coisa. Quando no banco vai uma linha em branco, essa linha é última linha do datagridview que sempre esta vazia. Dessa forma, é mais prudente enviar os dados para uma tabela temporaria e dela para o banco. Acontece que estou tendo dois problemas dessa forma. Uma na hora de inserir registros e duas na hora de editar pedidos. O problema da edição é que, quando salvo da Ok mas quando salvo outro pedido sem antes fechar e abrir o forme da um erro dizendo que não há linha na posição tal e limpa a tabela. eis o código: E na hora de inmserir um, segundo pedido, da erro de indice: Imports MySql.Data.MySqlClient Public Class Pedidos 'INICIO DAS DECLARAÇÕES DAS VARIAVEIS GLOBAIS Dim accDb As New DBConnection Dim registrocliente As Integer Dim registroproduto As Integer Dim registroitem As Integer Dim registropedido As Integer Dim registropedidos As Integer Dim I As Integer = 0 Dim O As Integer = 0 Dim W As Integer = 0 Dim Proximopedido As New Integer Dim ds As DataSet = Nothing Dim ds_itens As DataSet = Nothing Dim ds_itens_temp As DataSet = Nothing Dim dt As DataTable Dim dr As DataRow Dim TabelaClientes As String = "clientes" Dim TabelaProdutos As String = "produtos" Dim TabelaPedidos As String = "pedidos" Dim TabelaDetalhesPedidos As String = "detalhespedidos" 'FIM DAS DECLARAÇÕES DAS VARIAVEIS GLOBAIS '''''''''''''''''''''''''''''''''''''''''' 'INICIO DO BLOCO DE FUNÇÕES Private Sub exibirDados(ByVal m As Integer) Dim i As Integer = dt.Rows.Count - 1 If m < 0 OrElse i < 0 Then Exit Sub dr = dt.Rows(m) LabelCodigoPed.Visible = True codigoped.Visible = True codigoped.Text = dr("pedidoID") codigocli.Text = dr("clienteID") cliente.Text = dr("nome") data.Text = dr("data") End Sub Private Sub atribuirDados(ByVal dr As DataRow) dr("data") = data.Text End Sub Public Sub CarregaPagina() Dim sqlpedidos As String = "select p.pedidoID, p.clienteID, p.ativo, p.data, c.nome as nome from pedidos p inner join clientes c ON p.clienteID = c.clienteID where p.ativo='S' order by pedidoID" ds = accDb.ExecuteDS(sqlpedidos, TabelaPedidos) dt = ds.Tables(tabelapedidos) registropedidos = dt.Rows.Count - 1 ' com primarykey dt.PrimaryKey = New DataColumn() {dt.Columns(0)} dr = dt.Rows.Find(registropedidos) registropedidos = dt.Rows.IndexOf(dr) ' com primarykey desabilita() If dt.Rows.Count = 0 Then Primeiro.Enabled = False Anterior.Enabled = False Proximo.Enabled = False Ultimo.Enabled = False Atualizar.Enabled = False Eliminar.Enabled = False End If If dt.Rows.Count > 0 Then registropedidos = 0 Primeiro_Click(Nothing, Nothing) Else registropedidos = -1 End If End Sub Private Sub listaitens() 'carrega ítens pedidos Dim sqlitens As String = "Select * from " & TabelaDetalhesPedidos & " where pedidoID=" & dr("pedidoID") ds_itens = accDb.ExecuteDS(sqlitens, TabelaDetalhesPedidos) DGWPedidos.DataSource = ds_itens.Tables(0).DefaultView mostracolunas() 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 End Sub 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 Public Sub desabilita() For Each c As Control In Me.gritens.Controls If TypeOf c Is TextBox OrElse TypeOf c Is Button Then c.Enabled = False End If Next For Each c As Control In Me.grpitens.Controls If TypeOf c Is TextBox OrElse TypeOf c Is Button Then c.Enabled = False End If Next End Sub Public Sub habilita() For Each c As Control In Me.gritens.Controls If TypeOf c Is Button OrElse TypeOf c Is DataGridView Then c.Enabled = True End If Next For Each c As Control In Me.grpitens.Controls If TypeOf c Is Button OrElse TypeOf c Is DataGridView Then c.Enabled = True End If Next End Sub Public Sub limpacampos() For Each c As Control In Me.grpitens.Controls If TypeOf c Is TextBox Then c.Text = "" End If Next End Sub Public Sub limpagrid() If DGWPedidos.DataSource IsNot Nothing Then DGWPedidos.DataSource = Nothing refazer_dgw() Else DGWPedidos.Rows.Clear() refazer_dgw() End If End Sub Private Sub mostracolunas() DGWPedidos.Columns.Item(0).HeaderText = "CODIGO PEDIDO" DGWPedidos.Columns.Item(1).HeaderText = "CODIGO PRODUTO" DGWPedidos.Columns.Item(2).HeaderText = "TIPO UNIDADE" DGWPedidos.Columns.Item(3).HeaderText = "DESCRIÇÃO" DGWPedidos.Columns.Item(4).HeaderText = "PREÇO UNITÁRIO" DGWPedidos.Columns.Item(5).HeaderText = "QTDE" DGWPedidos.Columns.Item(6).HeaderText = "SUBTOTAL" End Sub Public Sub ProximoRegistro() Dim sqlUltimoIDPedido As String = "select max(pedidoID) from " & TabelaPedidos & " order by pedidoID" Dim dsUltimoIDPedido As DataSet = accDb.ExecuteDS(sqlUltimoIDPedido, TabelaPedidos) Dim drUltimoIDPedido As DataRow If dsUltimoIDPedido.Tables(0).Rows.Count = 0 Then Proximopedido = 1 Else For Each drUltimoIDPedido In dsUltimoIDPedido.Tables(TabelaPedidos).Rows If IsDBNull(drUltimoIDPedido.Item(0)) Then Proximopedido = 1 Else Proximopedido = drUltimoIDPedido.Item(0) + 1 End If Next drUltimoIDPedido End If End Sub Public Sub refazer_dgw() If DGWPedidos.Columns.Count = 0 Then DGWPedidos.AutoGenerateColumns = False Dim txt1 As New DataGridViewTextBoxColumn() Dim txt2 As New DataGridViewTextBoxColumn() Dim txt3 As New DataGridViewTextBoxColumn() Dim txt4 As New DataGridViewTextBoxColumn() Dim txt5 As New DataGridViewTextBoxColumn() Dim txt6 As New DataGridViewTextBoxColumn() Dim txt7 As New DataGridViewTextBoxColumn() DGWPedidos.SelectionMode = DataGridViewSelectionMode.FullRowSelect txt1.HeaderText = "CODIGO PEDIDO" txt2.HeaderText = "CODIGO PRODUTO" txt3.HeaderText = "TIPO UNIDADE" txt4.HeaderText = "DESCRIÇÃO" txt5.HeaderText = "PREÇO UNITÁRIO" txt6.HeaderText = "QTDE" txt7.HeaderText = "SUBTOTAL" txt1.DataPropertyName = "pedidoID" txt2.DataPropertyName = "produtoID" txt3.DataPropertyName = "unidade" txt4.DataPropertyName = "descricao" txt5.DataPropertyName = "preço" txt6.DataPropertyName = "quantidade" txt7.DataPropertyName = "subtotal" DGWPedidos.Columns.Add(txt1) DGWPedidos.Columns.Add(txt2) DGWPedidos.Columns.Add(txt3) DGWPedidos.Columns.Add(txt4) DGWPedidos.Columns.Add(txt5) DGWPedidos.Columns.Add(txt6) DGWPedidos.Columns.Add(txt7) End If End Sub Private Sub incluirRegistro() Dim sqlpedidos As String = "INSERT INTO " & TabelaPedidos & " (clienteID,ativo,data)VALUES ('" & codigocli.Text & "','S','" & Format(Date.Today, "yyyy-MM-dd") & "')" Dim ds_pedidos As DataSet = accDb.ExecuteDS(sqlpedidos, TabelaPedidos) For Each linha As DataGridViewRow In DGWPedidos.Rows Dim sqlitens As String = "INSERT INTO " & TabelaDetalhesPedidos & " (pedidoID,produtoID,unidade,descricao,preço,quantidade,subtotal) VALUES ('" & DGWPedidos.Rows(I).Cells(0).Value & "','" & DGWPedidos.Rows(I).Cells(1).Value & "','" & DGWPedidos.Rows(I).Cells(2).Value & "','" & DGWPedidos.Rows(I).Cells(3).Value & "','" & DGWPedidos.Rows(I).Cells(4).Value & "','" & DGWPedidos.Rows(I).Cells(5).Value & "','" & DGWPedidos.Rows(I).Cells(6).Value & "')" accDb.ExecuteDS(sqlitens, TabelaDetalhesPedidos) I = I + 1 Next linha Try MessageBox.Show("Pedidos incluido com sucesso.") DGWPedidos.DataSource = Nothing CarregaPagina() Catch ex As Exception MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message) End Try End Sub 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("Pedidos atualizado com sucesso.") DGWPedidos.DataSource = Nothing CarregaPagina() Catch ex As Exception MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message) End Try End Sub Private Sub eliminarRegistro(ByVal dr As DataRow) Dim sql As String = "UPDATE " & TabelaPedidos & " SET ativo = 'N' where pedidoID = " & dr("pedidoID") ds = accDb.ExecuteDS(sql, TabelaPedidos) Proximo_Click(Nothing, Nothing) Try MessageBox.Show("Pedido excluido com sucesso.") Catch ex As Exception MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message) End Try End Sub 'FIM DO BLOCO DE FUNÇÕES '''''''''''''''''''''''''''''' 'INICIO DO BLOCO DE PROCIDURES Private Sub Pedidos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'carrega pedidos CarregaPagina() End Sub Private Sub Primeiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Primeiro.Click registropedidos = 0 exibirDados(registropedidos) listaitens() End Sub Private Sub Anterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Anterior.Click registropedidos = registropedidos - 1 If registropedidos < 0 Then registropedidos = 0 exibirDados(registropedidos) listaitens() End Sub Private Sub Proximo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Proximo.Click Dim i As Integer = dt.Rows.Count - 1 registropedidos = registropedidos + 1 If registropedidos > i Then registropedidos = i exibirDados(registropedidos) listaitens() End Sub Private Sub Ultimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ultimo.Click registropedidos = dt.Rows.Count - 1 exibirDados(registropedidos) listaitens() End Sub Private Sub bcliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bcliente.Click Dim dialogo As New frmClientes dialogo.ShowDialog() If dialogo.DialogResult = Windows.Forms.DialogResult.OK Then Dim sql As String = "Select * from " & TabelaClientes & " where clienteID = '" & dialogo.registrocliente & "'" ds = accDb.ExecuteDS(sql, TabelaClientes) Dim dr As DataRow For Each dr In ds.Tables(0).Rows codigocli.Text = dr.Item("clienteID") cliente.Text = dr.Item("nome") registrocliente = dr.Item("clienteID") Next dr Else MsgBox("Não foi selecionado nenhum cliente.") codigocli.Text = "" cliente.Text = "" End If End Sub Private Sub bproduto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bproduto.Click Dim dialogo As New frmProdutos dialogo.ShowDialog() If dialogo.DialogResult = Windows.Forms.DialogResult.OK Then Dim sql As String = "Select * from " & TabelaProdutos & " where produtoID = '" & dialogo.registroproduto & "'" ds = accDb.ExecuteDS(sql, TabelaProdutos) Dim dr As DataRow For Each dr In ds.Tables(0).Rows codigoprod.Text = dr.Item("produtoID") produto.Text = dr.Item("descricao") preço.Text = dr.Item("preço") unidade.Text = dr.Item("unidade") registroproduto = dr.Item("produtoID") Next dr Else MsgBox("Não foi selecionado nenhum cliente.") codigocli.Text = "" cliente.Text = "" End If End Sub Private Sub Novo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Novo.Click If Novo.Text = "Novo" Then limpacampos() limpagrid() ProximoRegistro() codigoped.Text = Proximopedido habilita() data.Text = Date.Today Primeiro.Enabled = False Proximo.Enabled = False Anterior.Enabled = False Ultimo.Enabled = False Atualizar.Enabled = False Eliminar.Enabled = False Encerrar.Text = "Cancela" Novo.Text = "Incluir" bcliente.Enabled = True bproduto.Enabled = True Incluir.Enabled = True Excluir.Enabled = True qtde.Enabled = True bcliente_Click(Nothing, Nothing) ElseIf Novo.Text = "Incluir" Then incluirRegistro() desabilita() Novo.Text = "Novo" Encerrar.Text = "Encerrar" Primeiro.Enabled = True Proximo.Enabled = True Anterior.Enabled = True Ultimo.Enabled = True Atualizar.Enabled = True Eliminar.Enabled = True End If End Sub 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 mostracolunas() 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 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 If IsDBNull(DGWPedidos.Rows.Count) Or DGWPedidos.Rows.Count = 0 Then W = 0 If Novo.Text = "Incluir" Then DGWPedidos.Rows.Add(Convert.ToInt32(Proximopedido), registroproduto, unidade.Text, produto.Text, preço.Text, Convert.ToInt32(qtde.Text), preço.Text * Convert.ToInt32(qtde.Text)) Else 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() End If 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 Private Sub Encerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Encerrar.Click If Encerrar.Text = "Encerrar" Then If MessageBox.Show("Deseja encerrar a aplicação", "Encerrar", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then If ds.HasChanges Then ds.AcceptChanges() End If Me.Close() End If ElseIf Encerrar.Text = "Cancela" Then DGWPedidos.DataSource = Nothing DGWPedidos.DataSource = ds_itens.Tables(0).DefaultView desabilita() Encerrar.Text = "Encerrar" Primeiro.Enabled = True Proximo.Enabled = True Anterior.Enabled = True Ultimo.Enabled = True Atualizar.Enabled = True Eliminar.Enabled = True codigoped.Visible = True LabelCodigoPed.Visible = True If dt.Rows.Count = 0 Then Atualizar.Enabled = False Eliminar.Enabled = False End If Novo.Text = "Novo" Novo.Enabled = True Atualizar.Text = "Atualizar" Anterior_Click(Nothing, Nothing) End If End Sub Private Sub Eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Eliminar.Click If registropedidos < 0 OrElse registropedidos > dt.Rows.Count - 1 Then Exit Sub Else If MessageBox.Show("Deseja Excluir esse registro", "Excluir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then If registropedidos < 0 OrElse registropedidos > dt.Rows.Count - 1 Then Exit Sub Dim dre As DataRow = dt.Rows(registropedidos) eliminarRegistro(dre) End If End If End Sub 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 'FIM DO BLOCO DE PROCIDURES End Class
  19. Bom, melhorando a pergunta: Como faço isso com a DataGridView: Preciso saber se na gridview existe alguma linha toda vazia e se tiver, exluir ela e depois, com as linhas que sobrarem, gravar no banco. Como fazer isso? Preciso disso pois tem uma bendita linha vazia na gridview que esta indo pro banco que não onsigo tirar
  20. Valor vazio na datagridview. como tirar? Bom, quando estou preenchendo um Novo Pedido no Formulario de pedidos. sempre aparece uma linha toda em branco no final da DataGridView que uso para mostrar os ítens do pedido adicionados. Acontece, que essa linha em braco, na hora de gravar o pedido no banco de dados, esta preenchendo uma linha na tabela de itenspedidos toda em branco eu quero , antes de garvar no banco, verificar se existe alguma linha toda em branco na DataGridView e se houver, descartar ela na hora de jogar para o banco. Como fazer isso? Tentei assim mas não deu: Private Sub incluirRegistro() Dim sqlpedidos As String = "INSERT INTO " & TabelaPedidos & " (clienteID,ativo,data)VALUES ('" & codigocli.Text & "','S','" & Format(Date.Today, "yyyy-MM-dd") & "')" Dim ds_pedidos As DataSet = accDb.ExecuteDS(sqlpedidos, TabelaPedidos) For Each linha As DataGridViewRow In DGWPedidos.Rows If linha.Cells Is String.Empty Then ds_itens_temp.Clear() Else Dim sqlitens As String = "INSERT INTO " & TabelaDetalhesPedidos & " (pedidoID,produtoID,unidade,descricao,preço,quantidade,subtotal) VALUES ('" & DGWPedidos.Rows(I).Cells(0).Value & "','" & DGWPedidos.Rows(I).Cells(1).Value & "','" & DGWPedidos.Rows(I).Cells(2).Value & "','" & DGWPedidos.Rows(I).Cells(3).Value & "','" & DGWPedidos.Rows(I).Cells(4).Value & "','" & DGWPedidos.Rows(I).Cells(5).Value & "','" & DGWPedidos.Rows(I).Cells(6).Value & "')" accDb.ExecuteDS(sqlitens, TabelaDetalhesPedidos) I = I + 1 End If Next linha Try MessageBox.Show("Pedidos incluido com sucesso.") DGWPedidos.DataSource = Nothing DGWPedidos.DataSource = ds_itens.Tables(0).DefaultView CarregaPagina() Catch ex As Exception MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message) End Try End Sub
  21. Pode sim. Obrigado e me desculpe por isso. É a vontade de fazer dar certo a qualquer custo mesmo que isto inflinja as regras do fórum. Por isso pesso desculpas. Me descuidei. Mas, a situação agora mudou de quadro. já que você esta ai, a situaçao agora é a seguinte: Fiz (risos) duas funçoes que retornam um dataset. Uma com tabelas temporarias e outro com tabelas vinda do MySql. Veja o código: Public Function ExecuteDSTEMP(ByVal sql As String) As DataSet Dim datasetitenspedidos = New DataSet() Dim da As MySqlDataAdapter = New MySqlDataAdapter() ' Definindo variável de tabela Dim dtPed As New DataTable("detalhespedidos") dt.TableName = "itens" Dim NomeTabela As String = dt.TableName Try OpenConnection() ' Definindo os campos da Tabela dtPed.Columns.Add("pedidoID", GetType(Integer)) dtPed.Columns.Add("produtoID", GetType(Integer)) dtPed.Columns.Add("unidade", GetType(Char)) dtPed.Columns.Add("descricao", GetType(String)) dtPed.Columns.Add("preço", GetType(Decimal)) dtPed.Columns.Add("quantidade", GetType(Integer)) dtPed.Columns.Add("subtotal", GetType(Decimal)) datasetitenspedidos.Tables.Add(dtPed) cmd.CommandType = CommandType.Text cmd.CommandText = sql cmd.Connection = Conexao da.SelectCommand = cmd da.Fill(datasetitenspedidos, NomeTabela) dt = datasetitenspedidos.Tables(NomeTabela) da.Dispose() Return datasetitenspedidos Catch ex As Exception MsgBox(ex.Message) End Try Return datasetitenspedidos End Function Public Function ExecuteDS(ByVal sql As String, ByRef tabela As String) As DataSet Dim ds As New DataSet Dim da As MySqlDataAdapter = New MySqlDataAdapter() Try OpenConnection() cmd.CommandType = CommandType.Text cmd.CommandText = sql cmd.Connection = Conexao da.SelectCommand = cmd da.Fill(ds, tabela) dt = ds.Tables(tabela) da.Dispose() Return ds Catch ex As Exception MsgBox(ex.Message) End Try Return ds End Function Bom, tenho uma daqtaGridView ligada ao dataset ExecuteDS através de datasource para exibir os detalhes de pedidos no formulario de pedidos. Eu preciso: Pegar cada linha que esta na DataGridView e entrgar aos Fields da tabela detalhespedidos que esta na função ExecuteDSTEMP e depois fazer .datasource =Notthing e manter os dados na DataGridtview para o caso de editar os ítens. Tentei com o código abaixo mas não deu. O que eu faço? Public Sub entrega_item_item() For O As Integer = 0 To 0 = DGWPedidos.Rows.Count 'ds_itens_temp.Tables(0).Rows.Add() ds_itens_temp.Tables(0).Rows().Add(DGWPedidos.Rows(O).Cells(1).Value, DGWPedidos.Rows(O).Cells(1).Value, DGWPedidos.Rows(O).Cells(2).Value, DGWPedidos.Rows(O).Cells(3).Value, DGWPedidos.Rows(O).Cells(4).Value, DGWPedidos.Rows(O).Cells(5).Value, DGWPedidos.Rows(O).Cells(6).Value) Next End Sub
  22. Tabelas no Dataset. Como fazer? Preciso criar um dataset via código mas não vou usar tabelas do MySql nele. Quero criar tabelas dinamicas nele. Se eu colocar uma ferramenta Dataset da tollbox no Form, tem a propriedade Tables onde crio as tabelas do dataset la. Como faço via código esse dataset e as tabelas dele? Nesse código tenho um, funçao que retorna um dataset: Como inserir uma tabela cientes com seus fileds ID e Nome nele? Public Function ExecuteDS(ByVal sql As String, ByRef tabela As String) As DataSet Dim ds As New DataSet Dim da As MySqlDataAdapter = New MySqlDataAdapter() Try OpenConnection() cmd.CommandType = CommandType.Text cmd.CommandText = sql cmd.Connection = Conexao da.SelectCommand = cmd da.Fill(ds, tabela) dt = ds.Tables(tabela) da.Dispose() Return ds Catch ex As Exception MsgBox(ex.Message) End Try Return ds End Function
  23. olá estou com alguns probleminhas com o DataGridView e preciso de ajuda. 1) Toda vez que abro a DataGridView ela vem sempra com a ultima linha toda em branco e não é possivel deletá-la. Mas, quandovou gravar no banco, eesa linha grava no banco uma linha cpom todos os valores em branco. Como retirar essa linha em branco? 2) Bom, minha DataGridView está ligada ao banco mysql atraves de datasource, e toda vez que vou alterar um peido e inserir um novo item de pedido no formulario de pedido na DataGridView ,da erro: "O índice estava fora do intervalo. Ele deve ser não-negativo e menor que o tamanho da coleção. Nome do parâmetro: index" Como resolver isso? veja o codigo que estou usando: Dim O as integer = 0 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 O As Integer = DGWPedidos.Rows.Count DGWPedidos.Rows(O).Cells(1).Value = dr("pedidoID") DGWPedidos.Rows(O).Cells(1).Value = registroproduto DGWPedidos.Rows(O).Cells(2).Value = unidade.Text DGWPedidos.Rows(O).Cells(3).Value = produto.Text DGWPedidos.Rows(O).Cells(4).Value = preço.Text DGWPedidos.Rows(O).Cells(5).Value = Convert.ToInt32(qtde.Text) DGWPedidos.Rows(O).Cells(6).Value = preço.Text * Convert.ToInt32(qtde.Text) O = +O total.Text = 0.0 For Each linha As DataGridViewRow In DGWPedidos.Rows total.Text += linha.Cells(6).Value ' total.Text = Format(total.Text, "#,##0.00") Next linha End Sub não sei se o procedimento é esse 3) Outro problema e que,quando acabo de gravar um novo registro, recebo a mensagem "Pedido Gravado com sucesso", dai, cliko novamente em Novo Pedido, preencho normalmente os dados do pedido inclusive a DataGridView mas, quando vou gravar no banco, grava o pedido mas da erro de indice na hora de gravar os ítens. Eis o cdódigo que uso nma hora na gravação: Private Sub incluirRegistro(ByVal dr As DataRow) Dim sqlpedidos As String = "INSERT INTO " & TabelaPedidos & " (clienteID,ativo,data)VALUES ('" & codigocli.Text & "','S','" & Format(Date.Today, "yyyy-MM-dd") & "')" Dim ds_pedidos As DataSet = accDb.ExecuteDS(sqlpedidos, TabelaPedidos) For Each linha As DataGridViewRow In DGWPedidos.Rows Dim sqlitens As String = "INSERT INTO " & TabelaDetalhesPedidos & " (pedidoID,produtoID,unidade,descricao,preço,quantidade,subtotal) VALUES ('" & DGWPedidos.Rows(I).Cells(0).Value & "','" & DGWPedidos.Rows(I).Cells(1).Value & "','" & DGWPedidos.Rows(I).Cells(2).Value & "','" & DGWPedidos.Rows(I).Cells(3).Value & "','" & DGWPedidos.Rows(I).Cells(4).Value & "','" & DGWPedidos.Rows(I).Cells(5).Value & "','" & DGWPedidos.Rows(I).Cells(6).Value & "')" accDb.ExecuteDS(sqlitens, tabeladetalhespedidos) I = I + 1 Next linha Try MessageBox.Show("Pedidos incluido com sucesso.") CarregaPagina() Catch ex As Exception MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message) End Try End Sub 03 problemas com gridview e gravação
×
×
  • Criar Novo...