none
Validación de textbox no funciona.

    Pregunta

  • Hoa tengo un problema, la verdad no tengo idea de que este pasando.

    Tengo un texbox dentro de mi gridview y ahi le puse un validator para que solo me aceptara números decimales con dos decimales después del punto, incluso también solo puedo poner números sin punto y no hay problema.

    La primera vez que probe eso me funciono perfectamente, pero ahora que al textbox le he agregado el evento de textchanged ya no funiona por alguna extraña razón.

    Cuando pongo 0.00 me dice que es un valon no valido y no entiendo porque si antes funcionaba perfectamente y ese debe de ser un valor valido, además de que esto siempre ocurre cuando empiezo a capturar la primera vez.

    En la columna me salen como 5 veces el textbox, si empiezo a capturar en x fila siempre me dice que no es valido, pero después de capturar ese valor ya pongo cualquier otra combinacion valida y no dice nada, solo es al momento de capturar la primera vez y no lo entiendo.

    Aqui dejo el codigo del textbox:

                          <asp:TemplateField HeaderText="Monto">
                            <ItemTemplate >
                                <asp:Label ID="lblsimbolo" runat="server" Text="$"></asp:Label>
                                <asp:TextBox ID="txtmonto" runat="server" Text='<%# Eval("Monto") %>' OnTextChanged="textbox_TextChanged" AutoPostBack="true" ></asp:TextBox>
                                <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"  ErrorMessage="*" Display="Dynamic"
                                 ValidationExpression ="^[0-9]{0,6}(\.[0-9]{1,2})?$"  ControlToValidate="txtmonto" Text="No válido"></asp:RegularExpressionValidator>
                          </ItemTemplate>
                        </asp:TemplateField>

    y aqui el evento:

     protected void textbox_TextChanged(object sender, EventArgs e)
            {
               try
                {
    
                TextBox tb = ((TextBox)(sender));
                GridViewRow grid = ((GridViewRow)(tb.NamingContainer));
                String text;
                text = tb.Text;
    
                decimal SaldoCapturado = decimal.Parse(text);
    
                String saldoAux;
                Label lsaldo = (Label)grid.FindControl("lblSaldo");
                saldoAux = lsaldo.Text;
                decimal SaldoD = decimal.Parse(saldoAux, NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"));
    
                if (SaldoCapturado < 0 || SaldoCapturado > SaldoD)
                {
                    ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('Saldo no valido');", true);
                }
                else
                {
    
                    if (GridView2.Columns[7].Visible == false)
                    {
    
                        TextBox textbox = (TextBox)grid.FindControl("txtmonto");
                        textbox.Text = text;
    
                    }
                }
                    if (GridView2.Columns[6].Visible == false)
                    {
    
                        TextBox textbox = (TextBox)grid.FindControl("txtHours");
                        textbox.Text = text;
                    }
    
                }
               catch (Exception ex)
               {
    
                   throw ex;
               }
               
            }
    Ahi arriba hago otra validación y esa si funciona, pero la de la expresión regular no se porque falla cuando tiene un evento el textbox.



    miércoles, 27 de febrero de 2013 14:08

Respuestas

  • Sorry por no responder antes, que se me fue el internet y hasta ahorita llego....

    Estuve probando algunas cosas y me di cuenta que el evento del textbox no tenia nada que ver, lo que me di cuenta es que lo que me causaba problema estaba en otro evento.

    Tengo otro boton que asigna y otro que desasigna valores en ese textbox, entonces cuando lo desasignaba le ponia " " un espacio en blanco y tal vez eso era lo que causaba que no me validara la expresión regular, porque cuando se le cambie eso por null ya todo me funciono perfectamente.

    Error de noob xDDDDDDD

    Gracias por sus respuestas al final pude darme cuenta yo sola, lamento las molestias :D igual a alguien le puede servier esta informacióna a futuro.

    • Marcado como respuesta Suiseki-Yaris jueves, 28 de febrero de 2013 3:15
    jueves, 28 de febrero de 2013 3:14

Todas las respuestas

  • Posiblemente sea porque colocaste la propiedad AutoPostBack del textbox en True. Pruebalo y cuéntanos como es que te fue.

    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    miércoles, 27 de febrero de 2013 14:25
  • o sea si no se lanza el TextChanged, o sea pones el AutoPostBack = false

    al presionar el boton este ejecuta la validacion de forma correcta ? el boton si valida la expresion regular he impide el postback

    pero el TextChanged no aplica la validacion, es raro que no aplique la validacion sabiendo que el TextChanged realiza un postback

    si pones alguna otra validacion como ser el RequiredFiledValidator este actua sobre los controles? solo para ver si son los controles de validacion en general o es solo este el de expresion regular el del problema

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    miércoles, 27 de febrero de 2013 14:41
  • Sorry por no responder antes, que se me fue el internet y hasta ahorita llego....

    Estuve probando algunas cosas y me di cuenta que el evento del textbox no tenia nada que ver, lo que me di cuenta es que lo que me causaba problema estaba en otro evento.

    Tengo otro boton que asigna y otro que desasigna valores en ese textbox, entonces cuando lo desasignaba le ponia " " un espacio en blanco y tal vez eso era lo que causaba que no me validara la expresión regular, porque cuando se le cambie eso por null ya todo me funciono perfectamente.

    Error de noob xDDDDDDD

    Gracias por sus respuestas al final pude darme cuenta yo sola, lamento las molestias :D igual a alguien le puede servier esta informacióna a futuro.

    • Marcado como respuesta Suiseki-Yaris jueves, 28 de febrero de 2013 3:15
    jueves, 28 de febrero de 2013 3:14