DIVIDIR TEXTBOX E FORMATAR PERCENTUAL

ROGERIOAZEVEDO 04/09/2012 15:56:20
#409142
Boa tarde.

Galera,

Não sou programador. Sou um mero fuçador. Sou administrador e conheço um pouco de MSSQL. Crio ferramentas básicas para me auxiliar na minha profissão. Elimino diversos relatórios com o uso de Dash Boards.

Comecei com EXCEL, e depois migrei para VB.Net. Achei a linguagem fácil de compreender e com a ajuda do pessoal consegui criar duas aplicações que me ajudaram muito. Um amigo me disse que eu deveria migrar para C#, me disse se tratar de uma linguagem [Ô]melhor[Ô]. Assim o fiz. De inicio tudo começou bem mas depois fui percebendo que a linguagem é bem mais complexa que VB.

Estou com a seguinte situação:

Tenho 2 TextBox que possuem valores da soma de um GRID. E preciso dividir o valor de um pelo outro e formatar como Percentual.

txbPercent = txbSoma1 / txbSoma2

Obrigado pela ajuda e desculpe pela ignorancia.

OCELOT 04/09/2012 16:11:07
#409147
Você tem que ver que o VB converte valores sozinho, enquanto que no C# é você quem tem que converter

C# você deveria no mínimo fazer

txbPercent.Text = (double.Parse(txbSoma1.Text) / double.Parse(txbSoma2.Text)).ToString();

Onde estou convertendo o texto para double e depois de feita a divisão estou convertendo novamente para texto, só que ai ainda pode ocorrer erros no caso dos valores dos TextBox não serem números válidos
ROGERIOAZEVEDO 04/09/2012 16:15:47
#409149
Deu erro.

As textbox que serão usadas vem do seguinte código:

private void Somar_Finan()
{

decimal Soma1 = 0;
decimal Soma2 = 0;
foreach (DataGridViewRow col in dgvFinan.Rows)
{
Soma1 = Soma1 + Convert.ToDecimal(col.Cells[1].Value);
Soma2 = Soma2 + Convert.ToDecimal(col.Cells[2].Value);
}


txbSoma3.Text = Convert.ToString(Soma1);
txbSoma3.Text = Convert.ToDouble(txbSoma3.Text).ToString([Ô]C[Ô]);

txbSoma4.Text = Convert.ToString(Soma2);
txbSoma4.Text = Convert.ToDouble(txbSoma4.Text).ToString([Ô]C[Ô]);


}
ROGERIOAZEVEDO 05/09/2012 09:32:48
#409191
Alguem?
JONATHANSTECKER 05/09/2012 10:15:38
#409194
Resposta escolhida
Esse seu método atende sua necessidade. Porém o uso do DataGridView é apenas para ser de visualização, e não como manipulação de dados... Mas sem problemas...
O erro deve estar ocorrendo ao tentar localizar o valor da célula no DataGridView.
Provavelmente o sistema não deve estar localizando o valor de col.Cells[2].Value.

Uma dica é ao invés de usar o Index, use o nome da coluna. col.Cells[[Ô]Column2[Ô]].Value
Dessa forma fica muito mais legível e confiável.
        private void Somar_Finan()
{

decimal Soma1 = 0;
decimal Soma2 = 0;
foreach (DataGridViewRow col in dgvFinan.Rows)
{
Soma1 = Soma1 + Convert.ToDecimal(col.Cells[[Ô]NOMEDACOLUNA1[Ô]].Value);
Soma2 = Soma2 + Convert.ToDecimal(col.Cells[[Ô]NOMEDACOLUNA2[Ô]].Value);
}


txbSoma3.Text = Convert.ToString(Soma1);
txbSoma3.Text = Convert.ToDouble(txbSoma3.Text).ToString([Ô]C[Ô]);

txbSoma4.Text = Convert.ToString(Soma2);
txbSoma4.Text = Convert.ToDouble(txbSoma4.Text).ToString([Ô]C[Ô]);

}

Obs.: Caso não seja esse o problema, nos passe mais detalhes do erro para que possamos te ajudar.

Outra dica, dê uma olhada neste artigo: UTILIZANDO OPERADORES DE ATRIBUICAO COMPOSTA
ROGERIOAZEVEDO 05/09/2012 16:01:04
#409231
Vou ler o artigo, o erro persistiu. Envio a imagem do erro.
JONATHANSTECKER 05/09/2012 16:23:30
#409238
O erro ocorre porque você está tentando calcular duas strings.
Informe o valor percentual dentro do método utilizando os valores decimais.
        private void button1_Click(object sender, EventArgs e)
{
Somar_Finan();
}

private void Somar_Finan()
{

decimal Soma1 = 0;
decimal Soma2 = 0;
foreach (DataGridViewRow col in dgvFinan.Rows)
{
Soma1 = Soma1 + Convert.ToDecimal(col.Cells[[Ô]Column2[Ô]].Value);
Soma2 = Soma2 + Convert.ToDecimal(col.Cells[[Ô]Column1[Ô]].Value);
}


txbSoma3.Text = Convert.ToString(Soma1);
txbSoma3.Text = Convert.ToDouble(txbSoma3.Text).ToString([Ô]C[Ô]);

txbSoma4.Text = Convert.ToString(Soma2);
txbSoma4.Text = Convert.ToDouble(txbSoma4.Text).ToString([Ô]C[Ô]);

tbxPercent.Text = (Soma1 + Soma2).ToString([Ô]C[Ô]);

}
Tópico encerrado , respostas não são mais permitidas