none
Condicion de texto para IF RRS feed

  • Pregunta

  • Hola

    Tengo esta condicion

       foreach (DataGridViewRow fila in dataGridView1.Rows)


                {

                    string EstadoVenta = Convert.ToString(fila.Cells[2].Value.ToString());

          if ( EstadoVenta == "Pendiente")
                          {
                                MessageBox.Show("Tienes una venta demorada", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning);}

                           }

    Me aparece el messagebox correctamente. Pero si le pongo       if ( EstadoVenta == "En curso / Enviado") el message box no aparece.

    Es decir si le pongo una sola palabra me lo toma la condicion, pero si le pongo mas de una palabra no me aparece el messagebox. Porque considera que esto puede ser? calculo que hay que espificar mejor el string pero no se me ocurre como


    A

    miércoles, 21 de octubre de 2020 19:34

Respuestas

  • Esos 2 caracteres juntos representan un salto de linea, pero no se por que aparecen ahi. Te dio false el if? Lo único que se me ocurre es borrar y escribir de nuevo en la base de datos el string. Aunque si quisieras podrías usar el número, que recuerdo que tenías (porque usé una versión mínima de tu BD para probar lo de la columna ComboBox) un id_estado o id_estado_venta, en la tabla principal (que se modifica y guarda en la tabla cuando cambias el ComboBox), podrías usar ese número y compararlo con los valores posibles. 

    También, como te comentó Alberto, no es necesario convertir a string 2 veces, como aquí:

    string EstadoVenta = Convert.ToString(fila.Cells[2].Value.ToString());

    Alcanza con sólo:

    string EstadoVenta = fila.Cells[2].Value.ToString();

    Aunque para mi gusto sería mejor esto:

    int EstadoVenta = Convert.ToInt32(fila.Cells[indice_id_estado].ToString());

    Y luego:

    if (EstadoVenta == 1) { ... }

    else if (EstadoVenta == 2) { ... }

    ...

    • Marcado como respuesta Eric_96 jueves, 22 de octubre de 2020 3:42
    jueves, 22 de octubre de 2020 1:07

Todas las respuestas

  • Usa el debugger para detener la ejecución en esa línea, y examina con muchísimo cuidado el valor exacto que tiene la variable EstadoVenta. La comparación de strings con == es absolutamente estricta, y devuelve false si existe la más mínima diferencia entre las cadenas que compara. Por ejemplo, si sobra o falta un espacio en blanco, o si pones alguna letra en minúscula cuando se esperaba en mayúscula, o si el espacio en blanco es un carácter que visualmente aparenta ser un espacio pero tiene otro código binario, etc. etc.

    Por cierto, es bastante poco útil escribir Convert.ToString(algunaCosa.ToString()). Si llamas a .ToString ya te devuelve un string, no sirve para nada llamar a Convert.ToString.

    miércoles, 21 de octubre de 2020 19:46
    Moderador
  • Hola Eric

    Fijate que coincidan exactamente los string, no tiene nada que ver la cantidad de palabras. Usa el Debugger. Pone un breakpoint en la linea siguiente a los if, y fijate que sean equivalentes, y cambia el que esté mal. 

    También, para hacer comparaciones, es más eficiente usar números que string.

    Saludos

    Pablo

    miércoles, 21 de octubre de 2020 19:47
  • Pablo, disculpa, que es debugger? 

    Estos puntos rojos son breakpoints verdad? no debugger

    estoy googleando pero me salen 20 cosas distintas... depuracion , debug, no se si sera lo mismo. 


    A

    miércoles, 21 de octubre de 2020 22:30
  • Si, esos puntos son breakpoints, y tenes que ejecutar en modo Debug (menú Debug -> Start Debugging). Te conviene poner un solo breakpoint en la linea que le sigue al if, así podes ver (pasando el mouse por arriba) los valores de las variables. Vas a ver que frena y te muestra el código, y con la linea del breakpoint en amarillo. De todo lo que haya detrás de esa linea y en el mismo ambiente o scope (aunque figure también más adelante) podes ver el valor.

    miércoles, 21 de octubre de 2020 23:14
  • Excelente Pablo muchisimas gracias se nota que es bastante util hacer eso.

    Estoy viendo que al valor que esta leyendo le esta agregando  \r\n al final, cuando en realidad en la base de datos el valor esta sin esas letras. Para el caso de "Pendiente" lo lee bien, no le agrega \r\n... Que sera este  \r\n Pablo??? tenes idea??

    Con respecto al resto de los combobox Pablo, el valor que leo es el numero (tal como me recomendaste)


    A

    jueves, 22 de octubre de 2020 0:20
  • Esos 2 caracteres juntos representan un salto de linea, pero no se por que aparecen ahi. Te dio false el if? Lo único que se me ocurre es borrar y escribir de nuevo en la base de datos el string. Aunque si quisieras podrías usar el número, que recuerdo que tenías (porque usé una versión mínima de tu BD para probar lo de la columna ComboBox) un id_estado o id_estado_venta, en la tabla principal (que se modifica y guarda en la tabla cuando cambias el ComboBox), podrías usar ese número y compararlo con los valores posibles. 

    También, como te comentó Alberto, no es necesario convertir a string 2 veces, como aquí:

    string EstadoVenta = Convert.ToString(fila.Cells[2].Value.ToString());

    Alcanza con sólo:

    string EstadoVenta = fila.Cells[2].Value.ToString();

    Aunque para mi gusto sería mejor esto:

    int EstadoVenta = Convert.ToInt32(fila.Cells[indice_id_estado].ToString());

    Y luego:

    if (EstadoVenta == 1) { ... }

    else if (EstadoVenta == 2) { ... }

    ...

    • Marcado como respuesta Eric_96 jueves, 22 de octubre de 2020 3:42
    jueves, 22 de octubre de 2020 1:07
  • Listo. Es lo correcto que directamente tome como valor el numero en vez del texto. Asi funciono correctamente. Gracias Pablo!!!!! 

    A

    jueves, 22 de octubre de 2020 3:43
  • Hola Eric_96

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Gracias por usar los foros de MSDN. 

     

     Andres Aguilar

    ____________________________ 

      

    jueves, 22 de octubre de 2020 17:48
    Moderador