none
somar valores dropdownlis RRS feed

  • Pergunta

  • Olá,

    como posso somar os valores de uma dropdownlist.

    Tenho o seguinte codigo:

       int soma12 = Convert.ToInt32(DropPerc1.SelectedValue) + Convert.ToInt32(DropPerc1.SelectedValue);
                    int soma123 = Convert.ToInt32(DropPerc1.SelectedValue) + Convert.ToInt32(DropPerc1.SelectedValue) + Convert.ToInt32(DropPerc3.SelectedValue);
                    int soma1234 = Convert.ToInt32(DropPerc1.SelectedValue) + Convert.ToInt32(DropPerc1.SelectedValue) + Convert.ToInt32(DropPerc3.SelectedValue) + Convert.ToInt32(DropPerc4.SelectedValue);
                    //ScriptManager.RegisterStartupScript(this, typeof(Page), UniqueID, "alert('" + soma12 + "');", true);
    
                    if (soma12 > 100 || soma12 < 100 && soma123 > 100 || soma123 < 100 && soma1234 > 100 || soma1234 < 100)
                    {
                        ScriptManager.RegisterStartupScript(this, typeof(Page), UniqueID, "alert('A percentagem não pode ser menor ou maior que 100%');", true);
                    }

    mas da me este erro :input string was not in correct format

    sábado, 25 de janeiro de 2014 12:34

Respostas

  • Olá Diogo,

    tente fazer dessa forma:

    		int soma12 = (DropPerc1.Text.Length > 0 ? Int32.Parse(DropPerc1.Text) : 0) + (DropPerc2.Text.Length > 0 ? Int32.Parse(DropPerc2.Text) : 0);
                    int soma123 = soma12 + (DropPerc3.Text.Length > 0 ? Int32.Parse(DropPerc3.Text) : 0);
                    int soma1234 = soma123 + (DropPerc4.Text.Length > 0 ? Int32.Parse(DropPerc4.Text) : 0);
    
                if (soma12 > 100 || soma12 < 100 && soma123 > 100 || soma123 < 100 && soma1234 > 100 || soma1234 < 100)
                {
                    ScriptManager.RegisterStartupScript(this, typeof(Page), UniqueID, "alert('A percentagem não pode ser menor ou maior que 100%');", true);
                }

    Continue carregando os drop's da forma que está.

    O que estava acontecendo era que provavelmente você estava tentando converter uma string "" para int.

    Da forma que está agora, antes de atribuir o valor para a variável do tipo int é feita uma validação e o código abaixo faz isso:

    int soma12 =  DropPerc1.Text.Length > 0 ?  Int32.Parse(DropPerc2.Text) : 0;

    int Soma12 = SE DropPerc1.Text.Length > 0 ENTÃO DropPerc1.Text Senão 0;

    A sua lógica no if eu não mudei.

    Testa ae e de um retorno.

    Att

    Wennder A. Santos

    Se foi útil, marque como útil. Se respondeu sua pergunta ou sanou sua dúvida, marque como resposta.






    • Marcado como Resposta DiogoMBM sábado, 25 de janeiro de 2014 15:34
    • Editado Wennder SantosMVP sábado, 25 de janeiro de 2014 16:43
    sábado, 25 de janeiro de 2014 15:17

Todas as Respostas

  • Olá Diogo,

    Lembre-se de que a propriedade SelectedValue não é a mesma coisa que a propriedade text.

    Se você quer fazer um calculo com o valor que está colocando no text, então mude para:

     SeuDropDownList.Text

    Se tiver dificuldades, poste como está carregando o seu DropDownList para eu te ajudar melhor, mas, isso já deve resolver.

    Teste e de um retorno.

    Att

    Wennder A. Santos

    Se foi útil, marque como útil. Se respondeu sua pergunta ou sanou sua dúvida, marque como resposta.

    sábado, 25 de janeiro de 2014 12:55
  • coloquei com text e da me o mm erro.

              int soma12 = Int32.Parse(DropPerc1.Text) + Int32.Parse(DropPerc1.Text);
                    int soma123 = Int32.Parse(DropPerc1.Text) + Int32.Parse(DropPerc1.Text) + Int32.Parse(DropPerc3.Text);
                    int soma1234 = Int32.Parse(DropPerc1.Text) + Int32.Parse(DropPerc1.Text) + Int32.Parse(DropPerc3.Text) + Int32.Parse(DropPerc4.Text);
    
    
                    if (soma12 > 100 || soma12 < 100 && soma123 > 100 || soma123 < 100 && soma1234 > 100 || soma1234 < 100)
                    {
                        ScriptManager.RegisterStartupScript(this, typeof(Page), UniqueID, "alert('A percentagem não pode ser menor ou maior que 100%');", true);
                    }

    sábado, 25 de janeiro de 2014 13:46
  • Olá Diogo,

    post por favor o código que você está usando para carregar seu DropDownList.

    Wennder

    sábado, 25 de janeiro de 2014 13:50
  • <asp:DropDownList ID="DropPerc1" runat="server" Width="302px" Height="29px" CssClass="labelStyle2">
                                <asp:ListItem></asp:ListItem>
                                <asp:ListItem>5</asp:ListItem>
                                <asp:ListItem>10</asp:ListItem>
                                <asp:ListItem>15</asp:ListItem>
                                <asp:ListItem>20</asp:ListItem>
                                <asp:ListItem>25</asp:ListItem>
                                <asp:ListItem>30</asp:ListItem>
                                <asp:ListItem>35</asp:ListItem>
                                <asp:ListItem>40</asp:ListItem>
                                <asp:ListItem>45</asp:ListItem>
                                <asp:ListItem>50</asp:ListItem>
                                <asp:ListItem>55</asp:ListItem>
                                <asp:ListItem>60</asp:ListItem>
                                <asp:ListItem>65</asp:ListItem>
                                <asp:ListItem>70</asp:ListItem>
                                <asp:ListItem>75</asp:ListItem>
                                <asp:ListItem>80</asp:ListItem>
                                <asp:ListItem>85</asp:ListItem>
                                <asp:ListItem>90</asp:ListItem>
                                <asp:ListItem>95</asp:ListItem>
                                <asp:ListItem>100</asp:ListItem>
                            </asp:DropDownList>
    sábado, 25 de janeiro de 2014 13:51
  • Cade o DropPerc3 e o DropPerc4?

    esse calculo que você está fazendo:

    Int32.Parse(DropPerc1.Text) + Int32.Parse(DropPerc1.Text);

    é as mesma coisa que isso?

    Int32.Parse(DropPerc1.Text) *2;

    De um retorno.

    Wennder

    sábado, 25 de janeiro de 2014 14:02
  • DropPerc2
    DropPerc3

    DropPerc4

    estaoa ser carregados da mm maneira que o 1

    sábado, 25 de janeiro de 2014 14:07
  • Olá Diogo,

    tente fazer dessa forma:

    		int soma12 = (DropPerc1.Text.Length > 0 ? Int32.Parse(DropPerc1.Text) : 0) + (DropPerc2.Text.Length > 0 ? Int32.Parse(DropPerc2.Text) : 0);
                    int soma123 = soma12 + (DropPerc3.Text.Length > 0 ? Int32.Parse(DropPerc3.Text) : 0);
                    int soma1234 = soma123 + (DropPerc4.Text.Length > 0 ? Int32.Parse(DropPerc4.Text) : 0);
    
                if (soma12 > 100 || soma12 < 100 && soma123 > 100 || soma123 < 100 && soma1234 > 100 || soma1234 < 100)
                {
                    ScriptManager.RegisterStartupScript(this, typeof(Page), UniqueID, "alert('A percentagem não pode ser menor ou maior que 100%');", true);
                }

    Continue carregando os drop's da forma que está.

    O que estava acontecendo era que provavelmente você estava tentando converter uma string "" para int.

    Da forma que está agora, antes de atribuir o valor para a variável do tipo int é feita uma validação e o código abaixo faz isso:

    int soma12 =  DropPerc1.Text.Length > 0 ?  Int32.Parse(DropPerc2.Text) : 0;

    int Soma12 = SE DropPerc1.Text.Length > 0 ENTÃO DropPerc1.Text Senão 0;

    A sua lógica no if eu não mudei.

    Testa ae e de um retorno.

    Att

    Wennder A. Santos

    Se foi útil, marque como útil. Se respondeu sua pergunta ou sanou sua dúvida, marque como resposta.






    • Marcado como Resposta DiogoMBM sábado, 25 de janeiro de 2014 15:34
    • Editado Wennder SantosMVP sábado, 25 de janeiro de 2014 16:43
    sábado, 25 de janeiro de 2014 15:17
  • já está a fazer correctamente. Obrigado. :)
    sábado, 25 de janeiro de 2014 15:34