Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

[Resolvido] Somando os totais

Recommended Posts

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("preco") = preco.Text
		rowNew("quantidade") = qtde.Text
		rowNew("subtotal") = preco.Text * qtde.Text
		ds_itens_temp.Tables(0).Rows.Add(rowNew)
		ds_itens_temp.AcceptChanges()

		total.Text = 0.0
		For Each linha As DataGridViewRow In DGWPedidos.Rows
			total.Text += linha.Cells(6).Value
			total.Text = FormatCurrency(total.Text, "0.00")
		Next linha
	End Sub
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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim:

Private Sub Excluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Excluir.Click
		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
		'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
	End Sub

É tentei assim mas não deu.

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi por que fica negativo também. Mas na pior das hipóteses partir pra gambir. Basta multiplica por -1 e boa. Terá o resultado correto.

A segunda dúvida existe uma forma sim, mas ao invés de criar uma sub irá criar uma function com retorno do tipo boolean. Pesquise sobre function no vb.net.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao tem que usar os nomeros com pontos ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

As duas primeiras sim.

Os problemas agora são só o lance de permitir virgula e numeros na tetbox só que só permnitir uma virgula e o lance da conta de multiplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que é a segunda vez que aviso, não faça up nos seus tópicos, isso irá gerar punição para você.

Para arredonar sua multiplicação utilize o ROUND. Referente a vírgula você terá que fazer alguma verificação no clique do botão, pq no textbox você terá que criar uma variável que funcionará como um COUNT. Mas caso o usuário apague o texto fica dificil zerar esta variável.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok. serei mais prudente.

 

usei o código abaixo para veriicar na datagridview o campo cpf/cnpj se fosse cpf masacara cpf se for cnpj..

 

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

Porem, essa datagridview esta conectada ao datatable que lista nas textbox os dados dos registos.

dai, cada vez que mudo um regsistro na navegação do s botões proximo, anteior.. ai mudo na datagridvieq tb dai a masca sai errado.

como resolvo isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nem respondeu se o outro problema esta resolvido e já ta colocando outro. Acho que o mais interessante é abrir um tópico para cada dúvida para facilitar. Eu te respondi uma coisa e você pergunto algo totalmente diferente agora. O problema da conta fico ok?

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

+ou-

O problema da conta fiz a gabiarra multiplicando por -1.Mas acho que não esta profissional.

Agora o problema da mascara dinamica n DataGridView não ta dando certo.

Tipo: se o dr.item("tipo") = "f" então mascara de CPF.

 

Ah!

Completando., eu consegui fazer o código para a textbox só aceitar numeros e uma só virgula. Agora falta varrer a string, achar vírgula e permitir só 2 digitos a pos ela:

segue:

Private Sub Preco_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Preco.KeyPress
		If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "," Then
			e.Handled = True
		End If
		'para usar o MatchCollecion, tem que declarar Imports System.Text.RegularExpressions
		Dim mc As MatchCollection
		Dim r As New Regex(",")
		mc = r.Matches(Preco.Text)
		If mc.Count.ToString() > 0 Then
			If e.KeyChar = "," Then
				e.Handled = True
			End If
		End If
	End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo contrario.

O erro é na juridica:

ok só uma observação.

Não tinha mostrado onde colocava a mascara no código

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
			cpf_cnpj.Mask = "###,###,###-##"
		End If
		If dr("tipo") = "j" Then
			tipo2.Checked = True
			tipo1.Checked = False
			cpf_cnpj.Mask = "##,###,###/####-##"
		End If
		Telefone.Text = dr("telefone")
		IE.Text = dr("ie")
	End Sub
A mascara até funciona mas o problema é que algumas vezes, não são todas, onde a pessoa é juridica, coloca mascara de CNPJ certo mas só exibe 11 dos 14 digitos do CPF.

ai que ta o problema

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

To colocando esse tópico como resolvi e fechado e o problema da mascara discutiremos aqui: http://forum.imasters.com.br/index.php?showtopic=322279

 

Se tiver outra dúvida que não tem a ver com o assunto da mascara pode abrir outro tópico, se o assunto for sobre a mascara utlizaremos o tópico que eu coloquei o link.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.