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. Alterei a propriedade SelectionMode da DataGridView para FullRowSelect e o problema da deleção de linhas não resolveu. Dessa formase você seleciona uma linha para deletar, ela deleta todas no banco.
  2. Esqueci de mostrar o código que estou usando para inserir registros (ítens do pedido) na datagridview: Private Sub Incluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Incluir.Click 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 Novo.Text = "Incluir" Then ' se for novo pedido 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 ' se for editar pedido 'DGWPedidos.CurrentRow.Cells(0).Value = dr("pedidoID") 'DGWPedidos.CurrentRow.Cells(1).Value = registroproduto 'DGWPedidos.CurrentRow.Cells(2).Value = unidade.Text 'DGWPedidos.CurrentRow.Cells(3).Value = produto.Text 'DGWPedidos.CurrentRow.Cells(4).Value = preço.Text 'DGWPedidos.CurrentRow.Cells(5).Value = Convert.ToInt32(qtde.Text) 'DGWPedidos.CurrentRow.Cells(6).Value = preço.Text * Convert.ToInt32(qtde.Text) I = DGWPedidos.Rows.Count DGWPedidos.Rows(I).Cells(1).Value = dr("pedidoID") DGWPedidos.Rows(I).Cells(1).Value = registroproduto DGWPedidos.Rows(I).Cells(2).Value = unidade.Text DGWPedidos.Rows(I).Cells(3).Value = produto.Text DGWPedidos.Rows(I).Cells(4).Value = preço.Text DGWPedidos.Rows(I).Cells(5).Value = Convert.ToInt32(qtde.Text) DGWPedidos.Rows(I).Cells(6).Value = preço.Text * Convert.ToInt32(qtde.Text) I = I + 1 End If 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 Quando eu abro a DBGrid, tanto na hora da navegação quanto na hora de um novo pedido, aparece sempre uma linha em branco no final da dagridvbiew que inclusive vai para o banco na hora da insersão.
  3. Estou tendo alguns probleminhas com meu estudo de VB.Net Tenho um form de pedidos e nele, umaDataGridView para listar, inserir e deletar(alteração) os ítens do pedido. A datagridaview, quando vou digitar um Novo Pedido, eu retiro o datasource e o preencho manualmente,sem problemas. A datagridaview fica enable= true mas com readionly= true. A datagridaview tem Datasource ligado ao banco. Quando vou criar um novo pedido, eu faço dgwpedidos.datasource = nothing desligando ela do banco e depois, crio manualmente as colunas do DataGridView mas quando vou alterar um pedido eu não tiro o datasource . Problemas: Quando estou gravando novo pedido, consigo gravar quantas linhas quizer mas quando desisto de algum, ítem e vou deletar, ai da o seguinte 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 Quando esto alterando um pedido da esse erro tambem tanto para inmserir quanto para deletar os ítens do pedido que se encontram nele. Ouitro último problema com datagridview é que não conmseigo gravar valores de dinheiro. Por exemplo: Na textbox esta 32,63 aí vai para a datagridview 32 Como resolover isso?
  4. Problemas dificeis de resolver 1) Ola. Estou fazendo o código abaixo para inserir pedidos e ítens do pedido: Private Sub incluirRegistro(ByVal dr As DataRow) Dim tabelapedidos As String = "pedidos" Dim tabeladetalhespedidos As String = "detalhespedidos" Dim sqlpedidos As String = "INSERT INTO " & tabelapedidos & " (clienteID,ativo,data)VALUES ('" & codigocli.Text & "','S','" & Format(Date.Today, "yyyy-MM-dd") & "')" Dim sqlitens As String = "INSERT INTO " & tabeladetalhespedidos & " (pedidoID,produtoID,unidade,descricao,preço,quantidade,subtotal) VALUES ('" & DGWPedidos.CurrentRow.Cells(0).Value & "','" & DGWPedidos.CurrentRow.Cells(1).Value & "','" & DGWPedidos.CurrentRow.Cells(2).Value & "','" & DGWPedidos.CurrentRow.Cells(3).Value & "','" & DGWPedidos.CurrentRow.Cells(4).Value & "','" & DGWPedidos.CurrentRow.Cells(5).Value & "','" & DGWPedidos.CurrentRow.Cells(6).Value & "')" Dim ds_pedidos As DataSet = accDb.ExecuteDS(sqlpedidos, tabelapedidos) For Each linha As DataGridViewRow In DGWPedidos.Rows accDb.ExecuteDS(sqlitens, tabeladetalhespedidos) Next Try MessageBox.Show("Pedidos incluido com sucesso.") exibirDados(registropedidos) Catch ex As Exception MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message) End Try End Sub A gravação do pedido vai beleza mas a gravação dos ítens não. Na hora de fazer o For Each, ele conta quantos ítens tem na DataGridView e grava apenas o primeiro ítem quantas vezes for o numero de linhas na gridview. Por exemplo: na grid tem la Pedido Produto quantidade preço Total 1 0325 20 25,00 50,00 1 0256 10 50,00 50,00 1 0148 30 30,00 90,00 3 registros. Certo? Pois é. O problema é que ele grava no banco só o primeiro registro assim: Pedido Produto quantidade preço Total 1 0325 20 25,00 50,00 1 0325 20 25,00 50,00 1 0325 20 25,00 50,00 Mas no codigo abaixo, ele já percorre cada linha e faz correto. Só que não é com o DataGridView e sim com o datarow 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 tabela As String = "Clientes" Dim sql As String = "Select * from " & tabela & " where clienteID = '" & dialogo.registrocliente & "'" ds = accDb.ExecuteDS(sql, tabela) 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 Onde esta o erro? 2)Como faço para limpar os registros em uma datagridview mantendo os nomes das colunas? Isso no caso de eu for fazer um novo pedido e clikar no botão Novo. Pergunto isso pois quando abro o formulario de pedidos a partir do Menu, já abre com os dados do primeiro pedido cadastrado. Bom, limpar as text areas consegui mas limpar a datagridview para popular com os ítens do novo pedido. O código que estou usando para popular a DataGridView com os dados que vem do banco no onLoad do form Cadastro de pedidos é: 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 Private Sub listaitens() 'carrega ítens pedidos Dim tabelaitens As String = "detalhespedidos" Dim sqlitens As String = "Select * from " & tabelaitens & " where pedidoID=" & dr("pedidoID") ds_itens = accDb.ExecuteDS(sqlitens, tabelaitens) 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 Next End Sub No carregamento do form, após a listagem dos dados dos pedidos, carrego os ítens do pedido na DataGridView Private Sub Pedidos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'carrega pedidos Dim tabelapedidos As String = "pedidos" 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 exibirDados(registropedidos) 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 Carregado o form pedidos, eu consigo navegar entre os pedidos gravados normalmente veja os pedidos e os seus ítens normalmente. Porem, quando vou inserir um novo pedido me deparo com 2 problemas. O primeiro é que não consigo limpar a DataGridView para carregarla com os ítens do novo pedido. O segundo é que, na hora de gravar o pedidono banco, o proprio MySql se encarrega de saber qual é o novo numero para o pedido ao passo de que n hora de gravar os ítens desse novo pedido na tabeladetalhespedidos aí eu preciso saber qual é o numero do novo pedido para eu consiguir gravar no banco corretamente e isso não to consiguindo. Veja o código do insert: Private Sub Novo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Novo.Click If Novo.Text = "Novo" Then limpacampos() data.Text = Date.Today codigoped.Visible = False LabelCodigoPed.Visible = False 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 dr = dt.NewRow incluirRegistro(dr) 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 Public Sub limpacampos() For Each c As Control In Me.grpitens.Controls If TypeOf c Is TextBox Then c.Text = "" End If Next For Each dgw As Control In Me.grpitens.Controls If TypeOf dgw Is DataGridView Then ' DGWPedidos.DataSource = Nothing End If Next End Sub Private Sub incluirRegistro(ByVal dr As DataRow) Dim tabelapedidos As String = "pedidos" Dim tabeladetalhespedidos As String = "detalhespedidos" Dim sqlpedidos As String = "INSERT INTO " & tabelapedidos & " (clienteID,ativo,data)VALUES ('" & codigocli.Text & "','S','" & Format(Date.Today, "yyyy-MM-dd") & "')" Dim sqlitens As String = "INSERT INTO " & tabeladetalhespedidos & " (pedidoID,produtoID,unidade,descricao,preço,quantidade,subtotal) VALUES ('" & DGWPedidos.CurrentRow.Cells(0).Value & "','" & DGWPedidos.CurrentRow.Cells(1).Value & "','" & DGWPedidos.CurrentRow.Cells(2).Value & "','" & DGWPedidos.CurrentRow.Cells(3).Value & "','" & DGWPedidos.CurrentRow.Cells(4).Value & "','" & DGWPedidos.CurrentRow.Cells(5).Value & "','" & DGWPedidos.CurrentRow.Cells(6).Value & "')" Dim ds_pedidos As DataSet = accDb.ExecuteDS(sqlpedidos, tabelapedidos) For Each linha As DataGridViewRow In DGWPedidos.Rows accDb.ExecuteDS(sqlitens, tabeladetalhespedidos) Next Try MessageBox.Show("Pedidos incluido com sucesso.") exibirDados(registropedidos) Catch ex As Exception MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message) End Try End Sub E agora segue o código completo para apreciação de voces: 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 dr As DataRow Dim I As Integer = 0 Dim dt As DataTable Dim ds As DataSet = Nothing Dim ds_itens As DataSet = Nothing '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) 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 Private Sub listaitens() 'carrega ítens pedidos Dim tabelaitens As String = "detalhespedidos" Dim sqlitens As String = "Select * from " & tabelaitens & " where pedidoID=" & dr("pedidoID") ds_itens = accDb.ExecuteDS(sqlitens, tabelaitens) 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 Next 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 desabilita() For Each c As Control In Me.gritens.Controls If TypeOf c Is TextBox OrElse TypeOf c Is DataGridView 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 DataGridView 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 TextBox OrElse TypeOf c Is DataGridView OrElse TypeOf c Is Button Then c.Enabled = True End If Next For Each c As Control In Me.grpitens.Controls If TypeOf c Is TextBox OrElse TypeOf c Is DataGridView OrElse TypeOf c Is Button 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 For Each dgw As Control In Me.grpitens.Controls If TypeOf dgw Is DataGridView Then ' DGWPedidos.DataSource = Nothing End If Next End Sub Private Sub incluirRegistro(ByVal dr As DataRow) Dim tabelapedidos As String = "pedidos" Dim tabeladetalhespedidos As String = "detalhespedidos" Dim sqlpedidos As String = "INSERT INTO " & tabelapedidos & " (clienteID,ativo,data)VALUES ('" & codigocli.Text & "','S','" & Format(Date.Today, "yyyy-MM-dd") & "')" Dim sqlitens As String = "INSERT INTO " & tabeladetalhespedidos & " (pedidoID,produtoID,unidade,descricao,preço,quantidade,subtotal) VALUES ('" & DGWPedidos.CurrentRow.Cells(0).Value & "','" & DGWPedidos.CurrentRow.Cells(1).Value & "','" & DGWPedidos.CurrentRow.Cells(2).Value & "','" & DGWPedidos.CurrentRow.Cells(3).Value & "','" & DGWPedidos.CurrentRow.Cells(4).Value & "','" & DGWPedidos.CurrentRow.Cells(5).Value & "','" & DGWPedidos.CurrentRow.Cells(6).Value & "')" Dim ds_pedidos As DataSet = accDb.ExecuteDS(sqlpedidos, tabelapedidos) For Each linha As DataGridViewRow In DGWPedidos.Rows accDb.ExecuteDS(sqlitens, tabeladetalhespedidos) Next Try MessageBox.Show("Pedidos incluido com sucesso.") exibirDados(registropedidos) 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) ' atribuirDados(dr) ' Dim sql As String = "UPDATE " & tabela & " SET nome = '" & Nome.Text & "',cpf_cnpj = '" & cpf_cnpj.Text & "',endereco= '" & Endereco.Text & "',email = '" & data.Text & "', where clienteID='" & dr("clienteID") & "'" ' ds = accDb.ExecuteDS(sql, tabela) exibirDados(registropedidos) Try MessageBox.Show("registro de Usuário alterado 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 Private Sub eliminarRegistro(ByVal codigo As Integer) ' Dim sql As String = "UPDATE " & tabela & " SET ativo = 'N' where clienteID = " & codigo ' ds = accDb.ExecuteDS(Sql, tabela) Proximo_Click(Nothing, Nothing) Try MessageBox.Show("registro de Usuário 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 Dim tabelapedidos As String = "pedidos" 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 exibirDados(registropedidos) 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 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 tabela As String = "Clientes" Dim sql As String = "Select * from " & tabela & " where clienteID = '" & dialogo.registrocliente & "'" ds = accDb.ExecuteDS(sql, tabela) 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 tabela As String = "Produtos" Dim sql As String = "Select * from " & tabela & " where produtoID = '" & dialogo.registroproduto & "'" ds = accDb.ExecuteDS(sql, tabela) 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() data.Text = Date.Today codigoped.Visible = False LabelCodigoPed.Visible = False 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 dr = dt.NewRow incluirRegistro(dr) 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 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 dr = dt.Rows(registropedidos) atualizarRegistro(dr) 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 If 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 'DGWPedidos.Rows(I).Cells(0).Value = dr("pedidoID") 'DGWPedidos.Rows(I).Cells(1).Value = registroproduto 'DGWPedidos.Rows(I).Cells(2).Value = unidade.Text 'DGWPedidos.Rows(I).Cells(3).Value = produto.Text 'DGWPedidos.Rows(I).Cells(4).Value = preço.Text 'DGWPedidos.Rows(I).Cells(5).Value = qtde.Text 'DGWPedidos.Rows(I).Cells(6).Value = preço.Text * qtde.Text DGWPedidos.CurrentRow.Cells(0).Value = dr("pedidoID") DGWPedidos.CurrentRow.Cells(1).Value = registroproduto DGWPedidos.CurrentRow.Cells(2).Value = unidade.Text DGWPedidos.CurrentRow.Cells(3).Value = produto.Text DGWPedidos.CurrentRow.Cells(4).Value = preço.Text DGWPedidos.CurrentRow.Cells(5).Value = qtde.Text DGWPedidos.CurrentRow.Cells(6).Value = preço.Text * qtde.Text total.Text = 0.0 For Each linha As DataGridViewRow In DGWPedidos.Rows total.Text += linha.Cells(6).Value Next I = DGWPedidos.Rows.Count + 1 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 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 Dim codigo As Integer Dim dr As DataRow = dt.Rows(registropedidos) codigo = dr("clienteID") codigo = CType(codigo.ToString, Integer) eliminarRegistro(codigo) End If End If ' Dim sql As String = "UPDATE " & tabela & " SET ativo = 'N' where clienteID = " & codigoped 'ds = accDb.ExecuteDS(sql, tabela) Proximo_Click(Nothing, Nothing) Try MessageBox.Show("registro de Usuário 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 PROCIDURES End Class caso queiram baixar o projeto para verem como esta. http://www.carcleo.com/vendas.zip
  5. Sabe o problema que to enfrentando com a Datagridview é ainda mais sério. Veja: No form de Pedidos tenho Texbox's para preencher com os dados do cliente, DataGridView que será populada com os ítens do pedido, Um Botão incluir com o código abaixo que ao ser precionado, pega o ítem (produto) escolhido e os seus dados e popula a primeira linha da datagridview. Se escolhe outro produto, clika novamente no botão incluir e popula a linha 2.,. a 3 e assim por diante. Porem, com o código abaixo, só consigo gravar as primeira linha da datagridview a partir da 2ª da erro: Private Sub Incluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Incluir.Click If 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 DGWPedidos.Rows(I).Cells(0).Value = dr("pedidoID") 'QUANDO CHEGA NESSA LINHA LINHA DA O ERRO ABAIXO, e no inicio do arquivo declaro i=0 DGWPedidos.Rows(I).Cells(1).Value = registroproduto DGWPedidos.Rows(I).Cells(2).Value = produto.Text DGWPedidos.Rows(I).Cells(3).Value = unidade.Text DGWPedidos.Rows(I).Cells(4).Value = preço.Text DGWPedidos.Rows(I).Cells(5).Value = qtde.Text DGWPedidos.Rows(I).Cells(6).Value = preço.Text * qtde.Text total.Text = 0.0 For Each linha As DataGridViewRow In DGWPedidos.Rows total.Text += linha.Cells(6).Value Next I = DGWPedidos.Rows.Count + 1 End Sub O erro que da: 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" O que tenho que mudar no código? Obs.: ao cdlikar no botão novo pedido, ainda não consegui limpar o grid. Código todo: 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 dr As DataRow Dim I As Integer = 0 Dim dt As DataTable Dim ds As DataSet = Nothing Dim ds_itens As DataSet = Nothing 'FIM DAS DECLARAÇÕES DAS VARIAVEIS GLOBAIS '''''''''''''''''''''''''''''''''''''''''' 'INICIO DO BLOCO DE FUNÇÕES Private Sub atribuirDados(ByVal dr As DataRow) dr("data") = data.Text End Sub 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) codigoped.Text = dr("pedidoID") codigocli.Text = dr("clienteID") cliente.Text = dr("nome") data.Text = dr("data") 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 Private Sub listaitens() 'carrega ítens pedidos Dim tabelaitens As String = "detalhespedidos" Dim sqlitens As String = "Select * from " & tabelaitens & " where pedidoID=" & dr("pedidoID") ds_itens = accDb.ExecuteDS(sqlitens, tabelaitens) 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 Next End Sub Public Sub desabilita() For Each c As Control In Me.gritens.Controls If TypeOf c Is TextBox OrElse TypeOf c Is DataGridView 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 DataGridView 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 TextBox OrElse TypeOf c Is DataGridView OrElse TypeOf c Is Button Then c.Enabled = True End If Next For Each c As Control In Me.grpitens.Controls If TypeOf c Is TextBox OrElse TypeOf c Is DataGridView OrElse TypeOf c Is Button 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 For Each dgw As Control In Me.grpitens.Controls If TypeOf dgw Is DataGridView Then ' DGWPedidos.DataSource = Nothing End If Next End Sub Private Sub atualizarRegistro(ByVal dr As DataRow) atribuirDados(dr) ' Dim sql As String = "UPDATE " & tabela & " SET nome = '" & Nome.Text & "',cpf_cnpj = '" & cpf_cnpj.Text & "',endereco= '" & Endereco.Text & "',email = '" & data.Text & "', where clienteID='" & dr("clienteID") & "'" ' ds = accDb.ExecuteDS(sql, tabela) exibirDados(registropedidos) Try MessageBox.Show("registro de Usuário alterado 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 Private Sub eliminarRegistro(ByVal codigo As Integer) ' Dim sql As String = "UPDATE " & tabela & " SET ativo = 'N' where clienteID = " & codigo ' ds = accDb.ExecuteDS(Sql, tabela) Proximo_Click(Nothing, Nothing) Try MessageBox.Show("registro de Usuário 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 Private Sub incluirRegistro(ByVal dr As DataRow) Dim tabelapedidos As String = "pedidos" Dim tabeladetalhespedidos As String = "detalhespedidos" Dim sqlpedidos As String = "INSERT INTO " & tabelapedidos & " (clienteID,ativo,data)VALUES ('" & codigocli.Text & "','S','" & Format(Date.Today, "yyyy-MM-dd") & "')" Dim sqlitens As String = "INSERT INTO " & tabeladetalhespedidos & " (pedidoID,produtoID,unidade,descricao,preço,quantidade,subtotal) VALUES ('" & codigoped.Text & "','" & codigoprod.Text & "','" & unidade.Text & "','" & produto.Text & "','" & preço.Text & "','" & qtde.Text & "','" & total.Text & "')" If DGWPedidos.RowCount = 0 Then MessageBox.Show("Favor Escolher os produtos antes de salvar o pedido!") End If Dim ds_pedidos As DataSet = accDb.ExecuteDS(sqlpedidos, tabelapedidos) For Each linha As DataGridViewRow In DGWPedidos.Rows Dim ds_itens As DataSet = accDb.ExecuteDS(sqlitens, tabeladetalhespedidos) Next Try MessageBox.Show("Pedidos incluido com sucesso.") exibirDados(registropedidos) 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 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 tabela As String = "Clientes" Dim sql As String = "Select * from " & tabela & " where clienteID = '" & dialogo.registrocliente & "'" ds = accDb.ExecuteDS(sql, tabela) 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 tabela As String = "Produtos" Dim sql As String = "Select * from " & tabela & " where produtoID = '" & dialogo.registroproduto & "'" ds = accDb.ExecuteDS(sql, tabela) 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 Pedidos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'carrega pedidos Dim tabelapedidos As String = "pedidos" 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 exibirDados(registropedidos) 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 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 Novo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Novo.Click If Novo.Text = "Novo" Then limpacampos() data.Text = Date.Today codigoped.Visible = False LabelCodigoPed.Visible = False 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 dr = dt.NewRow incluirRegistro(dr) 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 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 dr = dt.Rows(registropedidos) atualizarRegistro(dr) 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 If 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 DGWPedidos.Rows(I).Cells(0).Value = dr("pedidoID") DGWPedidos.Rows(I).Cells(1).Value = registroproduto DGWPedidos.Rows(I).Cells(2).Value = produto.Text DGWPedidos.Rows(I).Cells(3).Value = unidade.Text DGWPedidos.Rows(I).Cells(4).Value = preço.Text DGWPedidos.Rows(I).Cells(5).Value = qtde.Text DGWPedidos.Rows(I).Cells(6).Value = preço.Text * qtde.Text total.Text = 0.0 For Each linha As DataGridViewRow In DGWPedidos.Rows total.Text += linha.Cells(6).Value Next I = DGWPedidos.Rows.Count + 1 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 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 Dim codigo As Integer Dim dr As DataRow = dt.Rows(registropedidos) codigo = dr("clienteID") codigo = CType(codigo.ToString, Integer) eliminarRegistro(codigo) End If End If ' Dim sql As String = "UPDATE " & tabela & " SET ativo = 'N' where clienteID = " & codigoped 'ds = accDb.ExecuteDS(sql, tabela) Proximo_Click(Nothing, Nothing) Try MessageBox.Show("registro de Usuário 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 PROCIDURES End Class
  6. Bom, a priimeira e a ultima duvidas estõ resolvidas mas a 2 e a 3ª ainda não. 2) Não consegui resolver o problema do F7. Para passar do formulario(Modo Visual) para o código aperto F7 Para passar do código para o formulario(Modo Visual) tenho que apertar shipt+F7 Fiz o que voce disse mas não sei se mudei coisa errada la. 3) Bom, estou programando com VB.Net e se eu fizer DGWPedfidos.;datasource = nothing, ai meu DataGridView some em vez de limpar as linhas para serem usadas na inserção dos ítens do novo pedido. Alguma outra ideia?
  7. Bom pessoal, to com 3 duvidas basicas: 1) tenho o código abaixo aonde eu desbilito controles em uma GroupBox, uma para textbox e outra para button. Gostaria de sabe se tem jeito de fazer um código só para desabilitar os 2. Código que tenho: Public Sub habilita() For Each c As Control In Me.grpitens.Controls If TypeOf c Is TextBox Then c.Enabled = True End If Next For Each bu As Control In Me.grpitens.Controls If TypeOf bu Is Button Then bu.Enabled = True End If Next end sub Ideia do que eu to querendo: Public Sub habilita() For Each c As Control In Me.grpitens.Controls If TypeOf c Is TextBox, button, DataGridView.. Then c.Enabled = True End If Next Next end sub Será que tem geito? 2) Como fazer para alternar do modo designer para o mode de codigo apertando só o F7? Pergunto pois tenho um PC e um Notebook e o Notebook preciso apertar Shipt + F7 para alternar para o mode de design e no PC não preissa. No PC altena entre os modos só apertando F7. 3) Tenho um botão Novo no meu cadastro de pedidos. gostaria de, quando clikar no botão, uma DataGridView fosse fosse limpa para inserir ítens do no vo pedido . 4) Quando cliko no Botão Novo, preciso incrementar +1 no numero do novo Pedido. Como fazer isso?
  8. tai: Imports MySql.Data.MySqlClient Public Class Pedidos Dim accDb As New DBConnection Dim registro As Integer Dim dr As DataRow Dim dt As DataTable Dim ds As DataSet = Nothing Dim b As New DataGridViewColumn Dim i As Integer = 0 Private Sub mostracolunas() DGWPedidos.Columns.Item(0).HeaderText = "CODIGO" DGWPedidos.Columns.Item(1).HeaderText = "DESCRIÇÃO" DGWPedidos.Columns.Item(2).HeaderText = "TIPO UNIDADE" DGWPedidos.Columns.Item(3).HeaderText = "PREÇO UNITÁRIO" DGWPedidos.Columns.Item(4).HeaderText = "QTDE" DGWPedidos.Columns.Item(5).HeaderText = "SUBTOTAL" 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 tabela As String = "Clientes" Dim sql As String = "Select * from " & tabela & " where clienteID = '" & dialogo.registro & "'" ds = accDb.ExecuteDS(sql, tabela) Dim dr As DataRow For Each dr In ds.Tables(0).Rows codigo.Text = dr.Item("clienteID") cliente.Text = dr.Item("nome") registro = dr.Item("clienteID") Next dr Else MsgBox("Não foi selecionado nenhum cliente.") codigo.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 tabela As String = "Produtos" Dim sql As String = "Select * from " & tabela & " where produtoID = '" & dialogo.registro & "'" ds = accDb.ExecuteDS(sql, tabela) Dim dr As DataRow For Each dr In ds.Tables(0).Rows produto.Text = dr.Item("descricao") preço.Text = dr.Item("preço") unidade.Text = dr.Item("unidade") registro = dr.Item("produtoID") Next dr Else MsgBox("Não foi selecionado nenhum cliente.") codigo.Text = "" cliente.Text = "" End If End Sub Private Sub Pedidos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim tabela As String = "detalhespedidos" Dim sql As String = "Select * from " & tabela & "" ds = accDb.ExecuteDS(sql, tabela) DGWPedidos.DataSource = ds.Tables(0).DefaultView mostracolunas() End Sub Private Sub Incluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Incluir.Click 'DGWPedidos.Rows(0).Cells(0).Value = registro 'DGWPedidos.Rows(0).Cells(1).Value = produto.Text 'DGWPedidos.Rows(0).Cells(2).Value = unidade.Text 'DGWPedidos.Rows(0).Cells(3).Value = preço.Text 'DGWPedidos.Rows(0).Cells(4).Value = qtde.Text 'DGWPedidos.Rows(0).Cells(5).Value = preço.Text * qtde.Text If qtde.Text = String.Empty Then MsgBox("Informe a quantidade requerida...") qtde.Focus() Exit Sub End If DGWPedidos.Rows(i).Cells(0).Value = registro DGWPedidos.Rows(i).Cells(1).Value = produto.Text DGWPedidos.Rows(i).Cells(2).Value = unidade.Text DGWPedidos.Rows(i).Cells(3).Value = preço.Text DGWPedidos.Rows(i).Cells(4).Value = qtde.Text DGWPedidos.Rows(i).Cells(5).Value = preço.Text * qtde.Text For x = 0 To DGWPedidos.Rows.Count total.Text = DGWPedidos.Rows(0).Cells(5).Value Next i = i + 1 End Sub Private Sub total_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles total.TextChanged 'total.Text = DGWPedidos.Rows(0).Cells(5).Value End Sub End Class
  9. Insistindo mais um pouquinho: Bom tentei incrementar mais uma linha à gridview cada vez que o botão "Incluir item ao pedido" for clikado (incluir.mouseclik) mas ta dando o seguinte erro quando incrementa mais 1 linha: 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 O incremento, 1, 2, 3, 4 ... esta funcionando agora mas quando manda inserir a 2ª linha da erro. Eis o código: Dim I As Integer = 0 ... ... ... Private Sub Incluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Incluir.Click If qtde.Text = String.Empty Then MsgBox("Informe a quantidade requerida...") qtde.Focus() Exit Sub End If DGWPedidos.Rows(I).Cells(0).Value = registro DGWPedidos.Rows(I).Cells(1).Value = produto.Text DGWPedidos.Rows(I).Cells(2).Value = unidade.Text DGWPedidos.Rows(I).Cells(3).Value = preço.Text DGWPedidos.Rows(I).Cells(4).Value = qtde.Text DGWPedidos.Rows(I).Cells(5).Value = preço.Text * qtde.Text I = I + 1 End Sub E agora. Como sair dessa?
  10. Seguinte pessoal, aproveitando que ninguém respondeu, deixa eu mudar a exposição do problema. Bom, tenho um dataset, uma gridview e um datasource A tabela que é ligada à gridview atraves do datasource e a tabela DetalhesPedidos e ela esta assim: pedidoID produtoID preço quantidade Na gridview gostaria de alterar esses campos, acrecentando mais 3 campos ficando assim: CODIGO DESCRICAO TIPO UNIDADE PREÇO UNITÁRIO QUANTIDADE PRECOTOTAL Com relação aos 4 primeiros campos tudo bem mas, como acrecentar mais colunas na gridview e na ordem que preciso e o que é + dificil para mim: Estando usando essa grid view para que, ao clikar em um, botão inserir, fazer aparecer na gridview o conteudo de umas textbox e,.............. à cada vez que clikar no botão inserir, tambem acrecentar + uma linha à gridview a cada clike no botão inserir em um form de pedidos. Como fazer isso?
  11. Olha,obrigado pela atenção mas ainda não entendi. Tem como ou você dar um exemplo ou então baixar o projetinho que to fazendo para dar uma olhada? Eu agradeceria muito http://www.carcleo.com/vendas.zip
  12. Seguinte: tenho no meu formulario de pedidos, um texbox com o código do produto e uma textbox com a descrição do produto. Abaixo, tenho uma Gridview e um botão incluir. O que eu preciso: Preciso que quando clikar em incluir, pegar os valores que estão nas textbox e preencher a gridview com com eles e, quando trocar os valores das textbox teria que ao clikar no botão incluir de novo, preencher outra linha na gridview. Outra coisa é que essa gridview não esta ligada a nenhum datasource e dessa forma, as colunas dele veem vazias e dai tentei preenher(alterar) os nomes(cabeçalhos) das colunas com o código abaixo mas só da um erro dizendo que esta fora do intervalo. O que fazer? Private Sub Pedidos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load DGWPedidos.Columns.Item(0).HeaderText = "CODIGO" DGWPedidos.Columns.Item(1).HeaderText = "DESCRIÇÃO" DGWPedidos.Columns.Item(2).HeaderText = "TIPO UNIDADE" DGWPedidos.Columns.Item(3).HeaderText = "PREÇO UNITÁRIO" DGWPedidos.Columns.Item(4).HeaderText = "SUB-TOTAL" End Sub
  13. Obrigado pessoal, a variavel registro no form de pesquisa tinha que ser publica e não DIM(privada ao formulario ou ao escopo onde se encontra) e estava como DIM. Dessa forma, seu valor não chegaria de jeito nenhum ao form de pedidos. Obrigado a todos. Bola pra frente.
  14. Ola. Tenho um form de pedidos e na parte que temos que preencher com os dados do cliente, temos um botão para abrir um form de pesquiza de clientes igual ao que vemos no link do macoratti: http://www.macoratti.net/08/06/vbn_psv2.htm Acontece que quando, no form de pesquiza, quando cliko em selecionar o registro após ter escolhido, me retona registro = 0. Porem, se eu colocar um breakpoint no código antes de fechar o código ai a variavel registro, tanto no form de pesquisa quanto no form de peidos, esta com o valor correto, mas se eu insistir e forçar a execução após o breakpoint, o valor da variavel é zerada. segue os códigos: Pedidos.vb Imports MySql.Data.MySqlClient Public Class Pedidos Dim accDb As New DBConnection Dim registro As Integer Dim dr As DataRow Dim dt As DataTable Dim ds As DataSet = Nothing 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 tabela As String = "Clientes" Dim sql As String = "Select * from " & tabela & " where clienteID = '" & registro & "'" ds = accDb.ExecuteDS(sql, tabela) dt = ds.Tables(tabela) dr = dt.Rows(registro) codigo.Text = dr("clienteID") cliente.Text = dr("nome") registro = dr("clienteID") Else MsgBox("Não foi selecionado nenhum cliente.") codigo.Text = "" cliente.Text = "" End If End Sub End Class frmClientes.vb Imports MySql.Data.MySqlClient Public Class frmClientes Dim accDb As New DBConnection Dim ped As New Pedidos Dim registro As Integer Dim dr As DataRow Dim dt As DataTable Dim ds As DataSet = Nothing Dim tabela As String = "Clientes" Private Sub mostracolunas() DGWClientes.Columns.Item(0).HeaderText = "ID" DGWClientes.Columns.Item(1).HeaderText = "CPF_CNPJ" DGWClientes.Columns.Item(2).HeaderText = "NOME" DGWClientes.Columns.Item(3).HeaderText = "ENDEREÇO" DGWClientes.Columns.Item(4).HeaderText = "E-MAIL" DGWClientes.Columns.Item(5).HeaderText = "ATIVO" DGWClientes.Columns.Item(6).HeaderText = "DATA" DGWClientes.Columns.Item(7).HeaderText = "TIPO" DGWClientes.Columns.Item(5).Visible = False DGWClientes.Columns.Item(7).Visible = False End Sub Private Sub frmClientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim sql As String = "Select * from " & tabela & " where ativo='S'" ds = accDb.ExecuteDS(sql, tabela) DGWClientes.DataSource = ds.Tables(0).DefaultView mostracolunas() End Sub Private Sub P_Nome_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P_Nome.TextChanged Try Dim sql As String = "Select * from " & tabela & " where ativo='S' and nome like '" & P_Nome.Text & "%'" ds = accDb.ExecuteDS(sql, tabela) DGWClientes.DataSource = ds.Tables(0).DefaultView Catch ex As Exception MessageBox.Show("Erro: " & ex.Message, "Sem conexão", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End Try End Sub Private Sub Selecionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Selecionar.Click Dim linha As Integer = DGWClientes.CurrentRow.Index registro = DGWClientes.Item("clienteID", linha).Value.ToString DialogResult = System.Windows.Forms.DialogResult.OK Close() End Sub End Class Ah, só uma observação: Quando estoui depuirando o código, na linha DialogResult = System.Windows.Forms.DialogResult.OK A parte System.Windows.Forms.DialogResult.OK, da resultado ok e a parte DialogResult já da Null. Como pode um resultado ok entregar null para a variavel?
  15. Cara, já tentei de "quase" tudo. Inclusive desinstalar e reinstalar. E além disso, tambem desinstalei com o Revo Uninstaller que tira até asw chaves no rewgistro e as pastas "lixo" que ficam e nada. Ta la o erro conforme a figura.
  16. Siceramente. Não entendi quase nada. La não tem, a solução para esse problema.
  17. Ola pessoal. Instalei o Visual Studio aqui em, casa e de uma hora para outra simplesmente não consigo adicionar foms a minha aplicação. Da o seguinte erro: Requested registry access is not allowed Tambem tentei criei uma nova aplicaçao mas da o mesmo erro. alguém sabe como resolber isso? Detalhes: Em arquivos já prontos, da para alterar o código e até compilar. Instalei o Visual Basic 2008 para ver e da o mesmo erro. Veja:
  18. Carlos Rocha

    RecordSet

    Não querendo incomodar mas já incomodando,. preciso de + uma força de voces não esquecendo de agradecer pelas ajudas já a mim prestadas. Seguinte: tenho o código de insert no banco e, quando chega na parte de gravar dinheiro no banco, ai ele tira da virgula pra traz tipo digito 31,25 vai para o banco 35. O ,25 não vai. Gostaria de saber onmde estou errando: Eis o código: (no banco é decimal(5,2)) Private Sub incluirRegistro(ByVal dr As DataRow) Dim sql As String = "INSERT INTO " & tabela & " (descricao,preço,unidade,ativo,data)VALUES ('" & Descricao.Text & "','" & preço.Text & "','" & Unidade.Text & "','S','" & Format(Date.Today, "yyyy-MM-dd") & "')" ds = accDb.ExecuteDS(sql, tabela) Try MessageBox.Show("Produto registrado com sucesso.") exibirDados(registro) Catch ex As Exception MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message) End Try End Sub
  19. Carlos Rocha

    RecordSet

    Poxa pessoal, ninguém?
  20. Carlos Rocha

    RecordSet

    Aqui, aproveitando o post,como faço para fazer o valor f ou j da variavel tip chegar la no final da clausula insert no sql? Só da que a variavel não retornou valor. Esse tipo1 e tipo2 são RadioButtons pois procurei RadioGroup no VS até encontrar e não encontrei!(rsrs) Private Sub incluirRegistro(ByVal dr As DataRow) Dim tip As String Dim databanco As Date = Date.Now If tipo1.Checked = True Then tip = "f" End If If tipo2.Checked = True Then tip = "j" End If Dim sql As String = "INSERT INTO " & tabela & " (nome,cpf_cnpj,endereco,email,ativo,data,tipo)VALUES ('" & Nome.Text & "','" & cpf_cnpj.Text & "','" & Endereco.Text & "','" & Email.Text & "','S','" & databanco & "','" & tip & "')" ds = accDb.ExecuteDS(sql, tabela) Try MessageBox.Show("registro de Usuário incluido com sucesso.") exibirDados(registro) Catch ex As Exception MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message) End Try End Sub
  21. Carlos Rocha

    RecordSet

    Como chamaria essa função?
  22. Carlos Rocha

    RecordSet

    desculpe mais uma vez. não estou usando como fuinção não. To usando como procidure(rsrs) mesmo (copiei codigo errado). To usando assim Public sub valida() If Nome.Text = "" Then MessageBox.Show("Preencha Nome!") Nome.Focus() Exit Sub End If End sub E, para chamar: valida() Faz a validação normal, seta o focus no campo nome mas não para a execução. E quantos às outras dúvidas? Obrigado pela sua atenção!
×
×
  • Criar Novo...