Inquiridor
Cálculo executado através de uma classe com parâmetros.

Pergunta
-
Boa tarde.
Ainda continuo desenvolvendo meu projeto Web Form, na linguagem de programação C#. Já tentei executá-lo através de uma classe com parâmetros. Mas, ao chamar o método para o txtVlrInsalubridade.Text = Converto.ToString(cs.ValorInsalubridade);, aparece um erro na sintaxe do código. Veja a imagem.
Veja os códigos da classe CalcSalario.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace ACadaCentavoWeb { public class CalcSalario { //-------Criação de atributos private double SalBase; private int PorcInsalubridade; private double VlrInsalubridade; private double Gratificacao; private double Produtividade; private double PorcAnuenio; private double VlrAnuenio; private double VRefeicoes; private double PorcHExtra; private double VlrHExtra; private double QtdHExtra; private double TotalHExtra; private double AbFamilia; private double PorcINSS; private double DescINSS; private double PorcIPREV; private double DescIPREV; private double PorcPREVEST; private double DescPREVEST; private double ImpRenda; private double PorcSindicato; private double DescSindicato; private double PlnSaude; private double EmpConsig; private double PorcVTransporte; private double DescVTransporte; private double SalBruto; private double SalLiquido; //--------Criação de um construtor com parâmetros public CalcSalario(double pSalBase, Int32 pPorcInsalubridade, double pVlrInsabrudidade, double pGratificacao, double pProdutividade, double pPorcAnuenio, double pVlrAnuenio, double pVRefeicoes, double pPorcHExtra, double pVlrHExtra, double pQtdHExtra, double pTotalHExtra, double pAbFamilia, double pPorcINSS, double pDescINSS, double pPorcIPREV, double pDescIPREV, double pPorcPREVEST, double pDescPREVEST, double pImpRenda, double pPorcSindicato, double pDescSindicato, double pPlnSaude, double pEmpConsig, double pPorVtransporte, double pDescVTransporte, double pSalBruto, double pSalLiquido) { SalBase = pSalBase; PorcInsalubridade = pPorcInsalubridade; VlrInsalubridade = pVlrInsabrudidade; Gratificacao = pGratificacao; Produtividade = pProdutividade; PorcAnuenio = pPorcAnuenio; VlrAnuenio = pVlrAnuenio; VRefeicoes = pVRefeicoes; PorcHExtra = pPorcHExtra; VlrHExtra = pVlrHExtra; QtdHExtra = pQtdHExtra; TotalHExtra = pTotalHExtra; AbFamilia = pAbFamilia; PorcINSS = pPorcINSS; PorcIPREV = pPorcIPREV; DescIPREV = pDescIPREV; PorcPREVEST = pPorcPREVEST; DescPREVEST = pDescPREVEST; ImpRenda = pImpRenda; PorcSindicato = pPorcSindicato; DescSindicato = pDescSindicato; PlnSaude = pPlnSaude; EmpConsig = pEmpConsig; PorcVTransporte = pPorVtransporte; DescVTransporte = pDescVTransporte; SalBruto = pSalBruto; SalLiquido = pSalLiquido; } //------Criação de um método para calcular o valor da insalubridade public void ValorInsalubridade() { VlrInsalubridade = (SalBase * PorcInsalubridade) / 100; } } }
Este é meu Web Form:
Por favor, me apontem uma solução. Já tentei executar esse cálculo de outras formas.
Obs.: A resposta tem que ser coerente. Já recebi respostas sem fundamento.
Muito obrigado, e, estou no aguardo.
Todas as Respostas
-
Olá! Cara, o problema é o seguinte, na sua classe você tem o método "ValorInsalubridade", e ele é um método "void" logo não retorna valor.
public void ValorInsalubridade() { VlrInsalubridade = (SalBase * PorcInsalubridade) / 100; }
Altera esse método para algo do yipo:
public double ValorInsalubridade() {
VlrInsalubridade = (SalBase * PorcInsalubridade) / 100;
return VlrInsalubridade;
}
Boa sorte!
Danilo Chicale
__________________________________________________________
Não esqueça de marcar se foi útil.
- Editado Danilo Chicale sexta-feira, 19 de fevereiro de 2016 18:20
- Sugerido como Resposta welington jrModerator sexta-feira, 19 de fevereiro de 2016 19:54
-
-
Olá, boa tarde!
Gostei da sua resposta. Ela tirou aquele erro. Realmente, o problema estava no retorno. Mas, depois apareceu outro problema na execução do meu projeto. Veja imagem:
Como você pode ver, este erro acontece quando eu clico no botão para fazer o cálculo da insalubridade.
Por favor, me mostre como resolver esse problema na linguagem do próprio C#. Para se ter uma ideia, nos vídeos que assisto esses tipos de problemas não aparecem. Será que com JavaScript resolve? Mesmo assim, eu prefiro que seja resolvido na linguagem do próprio C#.
-
Posta o código da classe CalcSalario que vejo se consigo te ajudar, mas visivelmente em um problema de conversão de tipos que provavelmente está no construtor da sua classe.
Boa sorte!
Danilo Chicale
____________________________________
Não esqueça de marcar se a resposta foi útil :D
- Editado Danilo Chicale segunda-feira, 22 de fevereiro de 2016 21:07
-
DesignWeb,
Seu código está muito suscetível a erro de conversão. Você pode implementar uma função Javascript para validar a entrada de dados. Seria algo como isso:
<HTML> <HEAD> <script type="text/Javascript"> function checkDec(el){ var ex = /^[0-9]+\.?[0-9]*$/; if(ex.test(el.value)==false){ el.value = el.value.substring(0,el.value.length - 1); } } </script> </HEAD> <BODY>
<asp:TextBox ID="txtPorcSinidicato" onkeyup="checkDec(this);" runat="server" Width="80px"></asp:TextBox> </BODY> </HTML>
Referência: http://forums.asp.net/t/1846158.aspx?accept+input+only+number+with+2+decimal+javascript
Outra alternativa seria criar um validador no C# mesmo, parecido com o sugerido aqui (parseDouble):
-
-
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace ACadaCentavoWeb { //--------------Atributos----------------------------- public class CalcSalario { private double SalBase; private int PorcInsalubridade; private double VlrInsalubridade; private double Gratificacao; private double Produtividade; private int PorcAnuenio; private double VlrAnuenio; private double VRefeicoes; private int PorcHExtra; private double VlrHExtra; private int QtdHExtra; private double TotalHExtra; private double AbFamilia; private int PorcINSS; private double DescINSS; private int PorcIPREV; private double DescIPREV; private int PorcPREVEST; private double DescPREVEST; private double ImpRenda; private int PorcSindicato; private double DescSindicato; private double PlnSaude; private double EmpConsig; private int PorcVTransporte; private double DescVTransporte; private double SalBruto; private double SalLiquido; //------------Construtor-------------------------- public CalcSalario(double pSalBase, int pPorcInsalubridade, double pVlrInsabrudidade, double pGratificacao, double pProdutividade, int pPorcAnuenio, double pVlrAnuenio, double pVRefeicoes, int pPorcHExtra, double pVlrHExtra, int pQtdHExtra, double pTotalHExtra, double pAbFamilia, int pPorcINSS, double pDescINSS, int pPorcIPREV, double pDescIPREV, int pPorcPREVEST, double pDescPREVEST, double pImpRenda, int pPorcSindicato, double pDescSindicato, double pPlnSaude, double pEmpConsig, int pPorVtransporte, double pDescVTransporte, double pSalBruto, double pSalLiquido) { SalBase = pSalBase; PorcInsalubridade = pPorcInsalubridade; VlrInsalubridade = pVlrInsabrudidade; Gratificacao = pGratificacao; Produtividade = pProdutividade; PorcAnuenio = pPorcAnuenio; VlrAnuenio = pVlrAnuenio; VRefeicoes = pVRefeicoes; PorcHExtra = pPorcHExtra; VlrHExtra = pVlrHExtra; QtdHExtra = pQtdHExtra; TotalHExtra = pTotalHExtra; AbFamilia = pAbFamilia; PorcINSS = pPorcINSS; PorcIPREV = pPorcIPREV; DescIPREV = pDescIPREV; PorcPREVEST = pPorcPREVEST; DescPREVEST = pDescPREVEST; ImpRenda = pImpRenda; PorcSindicato = pPorcSindicato; DescSindicato = pDescSindicato; PlnSaude = pPlnSaude; EmpConsig = pEmpConsig; PorcVTransporte = pPorVtransporte; DescVTransporte = pDescVTransporte; SalBruto = pSalBruto; SalLiquido = pSalLiquido; } //-----------------Métodos---------------------- public double ValorInsalubridade() { VlrInsalubridade = (SalBase * PorcInsalubridade) / 100; return VlrInsalubridade; } public double ValorAnuenio() { VlrAnuenio = (SalBase * PorcAnuenio) / 100; return VlrAnuenio; } public double ValorHExtra() { VlrHExtra = ((SalBase / 180) * (PorcHExtra / 100)); return VlrHExtra; } public double TotalHExtras() { TotalHExtra = (VlrHExtra * QtdHExtra); return TotalHExtra; } } }
-
Você implemento a minha sugestão de validação via Javascript?
Abaixo segue um exemplo do que sugeri em C#, como pode perceber eu não escrevi todo o código, mas acho que se olhar com atenção vai conseguir terminar de implementa-lo.
try { double pSalBase = parseDouble(txtSalBase.Text); int pPorcInsalubridade = parseInt(txtSalBase.Text); //Faz o mesmo com o restante e depois chama o CalcSalario CalcSalario cs = new CalcSalario(pSalBase, pPorcInsalubridade); } catch (Exception ex) { //Aqui você notifica o erro ao usuário. Response.Write(ex.Message); } } private static double parseDouble(string valor) { double _valor; if (double.TryParse(valor, out _valor)) return _valor; else throw new FormatException(string.Format("O número {0} não é um decimal válido", valor)); } private static int parseInt(string valor) { int _valor; if (int.TryParse(valor, out _valor)) return _valor; else throw new FormatException(string.Format("O número {0} não é válido", valor)); }
-
Ainda não fiz a implementação com Java script. Hoje não vai dar para fazer isso, vou para a faculdade. Mas, amanhã farei essa implementação. Mesmo assim prefiro que tudo fique registrado no code-behind do c#, pois nos vídeos que assisti esses erros não aparecem.
Um abraço, e até amanhã.
-
Pois é, nos vídeos os dados inseridos sempre estão no formato correto, mas em um ambiente real as coisas são diferentes. Na verdade os erros acontecem em ambientes reais, com pessoas reais e dados reais.
Os vídeos editados nunca possuem erros não propositais e se você assistir eventos ou apresentações ao vivo ou até vídeos sem edição (onde alguém escreve códigos), você verá que erros acontecem.
Sobre a validação... sim, ela sempre precisa ser feita no C#, mas fazer ela em Javascript facilita muito para o usuário, pois evita que dados inválidos possam chegar no C# e gerar um erro.
Erros sempre vão acontecer, não importa quanta experiência você tiver, então o que você deve fazer sempre é tratá-los, já que não pode evitá-los 100%. Muitas vezes o erro nem é culpa sua, mas ele vai acontecer.
Lei de MURPHY se aplica bem ao dia a dia de um desenvolvedor...
-
Boa tarde!
Estou aqui, na faculdade. Eu fiz a implementação em JavaScript. Só que eu criei uma pasta, depois criei uma página Variavel.js, e adicionei dentro dessa pasta. Daí, eu coloquei o caminho dessa página no HEAD da página asp. Fiz também a implementação dos códigos C# no evento Click do btnInsalubridade. Coloquei todos os códigos que você escreveu aqui. Não sei para que servem essas variáveis todas que você fez. Eu clico não botão, e não acontece nada. Só poder poder enviar o que eu fiz aqui amanhã. Pois aqui na faculdade não tem Internet Wi-Fi.
-
Bom dia, Cesar!
Aqui estão os códigos:
Códigos criados no evento Click de btnInsalubridade... protected void btnInsalubridade_Click(object sender, EventArgs e) { //CalcSalario cs = new CalcSalario(Convert.ToDouble(txtSalBase.Text), Convert.ToInt32(txtPorcInsalubridade.Text), Convert.ToDouble(txtVlrInsalubridade.Text), Convert.ToDouble(txtGratificacao.Text), // Convert.ToDouble(txtProdutividade.Text), Convert.ToInt16(txtPorcAnuenio.Text), // Convert.ToDouble(txtVlrAnuenio.Text), Convert.ToDouble(txtVRefeicao.Text), Convert.ToInt16(txtPorcHExtra.Text), // Convert.ToDouble(txtVlrHExtra.Text), Convert.ToInt16(txtQtdHExtra.Text), Convert.ToDouble(txtTHoraExtra.Text), // Convert.ToDouble(txtAbFamilia.Text), Convert.ToInt16(txtPorcInss.Text), Convert.ToDouble(txtDescInss), // Convert.ToInt16(txtPorcIprev.Text), Convert.ToDouble(txtDescIprev), Convert.ToInt16(txtPorcPrevEstado.Text), // Convert.ToDouble(txtDescPrevEstado.Text), Convert.ToDouble(txtImpRenda.Text), Convert.ToInt16(txtPorcSinidicato.Text), // Convert.ToDouble(txtDescSinidicato.Text), Convert.ToDouble(txtPlanoSaude.Text), Convert.ToDouble(txtEmpConsig.Text), // Convert.ToInt16(txtPorcVTransporte.Text), Convert.ToDouble(txtVTranspotes.Text), // Convert.ToDouble(txtSalBruto.Text), Convert.ToDouble(txtSalLiquido.Text)); try { double pSalBase = parseDouble(txtSalBase.Text); int pPorcInsalubridade = parseInt(txtPorcInsalubridade.Text); double pVlrInsalubridade = parseDouble(txtVlrInsalubridade.Text); CalcSalario cs = new CalcSalario(pSalBase, pPorcInsalubridade, pVlrInsalubridade); txtVlrInsalubridade.Text = Convert.ToString(pSalBase * (pPorcInsalubridade / 100)); } catch(Exception ex) { Response.Write(ex.Message); } } //----------------Não sei para que serve------------------------- private static double parseDouble(string valor) { double _valor; if (double.TryParse(valor, out _valor)) return _valor; else throw new FormatException(string.Format("O número {0} não é um decimal válido", valor)); } //-------------Não sei para que serve------------------------------------- private static int parseInt(string valor) { int _valor; if (int.TryParse(valor, out _valor)) return _valor; else throw new FormatException(string.Format("O número {0} não é válido", valor)); }