none
Formato de miles en un datagridview RRS feed

  • Pregunta

  • Hola buenos dias 

    Ante todo muchas gracias.

    Quisiera saber porque me sigue saliendo la columna 4 de mi datagridview con punto cuando le doy formato de separador de miles coma.

     DataGridView1.Columns(4).DefaultCellStyle.Format = "#,##0,00"

    revise mi configuración regional y esta todo correcto separador de miles , y separador de decimal .

    pero me sigue saliendo el valor con punto 5.000 cuando debería ser 5,000

    Estoy trabajando en Visual Studio 2015 y el codigo lo estoy poniendo en el evento load del formulario donde esta el data

    gracias

    miércoles, 20 de junio de 2018 17:22

Respuestas

  • "Yayimilteh" escribió:

    > Quisiera saber porque me sigue saliendo la columna 4 de mi datagridview con punto
    > cuando le doy formato de separador de miles coma.
    >
    > DataGridView1.Columns(4).DefaultCellStyle.Format = "#,##0,00"
    >
    > revise mi configuración regional y esta todo correcto separador de miles , y separador de decimal .
    >
    > pero me sigue saliendo el valor con punto 5.000 cuando debería ser 5,000

    Hola:

    Si comentas que en la configuración regional de tu sistema operativo el separador de miles es la coma (,) y el separador decimal es el punto (.), no veo yo donde está el problema, salvo que en el formato asignado a la propiedad Format de la columna estás utilizando el mismo carácter para especificar tanto el separador de miles como el separador decimal.

    Si deseas que se especifiquen también los decimales, entiendo que lo correcto sería asignar el punto como carácter separador de decimales a la cadena de caracteres:

    DataGridView1.Columns(4).DefaultCellStyle.Format = "#,##0.00"

    Y al asignar explícitamente un formato de cadena personalizado, entiendo que da igual los caracteres que tengas establecidos en la configuración regional de tu sistema operativo.

    Doy por hecho que la quinta columna (Columns(4)) del control DataGridView está enlazada a un origen de datos (un objeto DataTable, por ejemplo) cuyo tipo de dato es NUMÉRICO, porque si el tipo de dato es TEXTO, pocas cadenas vas a poder formatear aunque el valor sean números.

    En la captura de pantalla anterior, el control DataGridView está enlazado a un objeto DataTable, cuya columna es del tipo Decimal, y el resultado formateado que aparece se debe al asignar a la propiedad Format la cadena #,##0.00, siendo la configuración regional de mi sistema operativo español de España, donde el carácter decimal es la coma y el carácter separador de miles el punto.

    Aplicar formato a tipos en .NET

    Si deseas realizar la prueba que yo he hecho, inicia un nuevo proyecto de Visual Basic, inserta en el formulario de inicio un control Button y un control DataGridView, y copia/pega el siguiente código:

    Public Class Form1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Try
                DataGridView1.DataSource = CreateDataTable()
                DataGridView1.Columns(0).DefaultCellStyle.Format = "#,##0.00"
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    
        Private Shared Function CreateDataTable() As DataTable
    
            Dim dt As New DataTable()
            Dim dc As New DataColumn("Numeros", Type.GetType("System.Decimal"))
            dt.Columns.Add(dc)
            Return dt
    
        End Function
    
    End Class

    Fíjate que la única columna del objeto DataTable es del tipo System.Decimal. Si cambias el tipo de dato a System.String, de nada sirve que le asignes a la columna del control DataGridView un formato numérico personalizado, ya que no se formatearán los valores aunque estos sean números.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    jueves, 21 de junio de 2018 9:31
    Moderador

Todas las respuestas

  • Hola:

    Prueba para dar formato de esta forma:

    DataGridView1.Columns(4).DefaultCellStyle.Format = "N2" 'Numero con 2 decimales

    Un cordial saludo.

    Gmma

    miércoles, 20 de junio de 2018 17:29
  • Muchas gracias por tu respuesta pero ya lo intente de todas las formas incluyendo la que me recomiendas y me sigue saliendo con punto.
    miércoles, 20 de junio de 2018 17:32
  • "Yayimilteh" escribió:

    > Quisiera saber porque me sigue saliendo la columna 4 de mi datagridview con punto
    > cuando le doy formato de separador de miles coma.
    >
    > DataGridView1.Columns(4).DefaultCellStyle.Format = "#,##0,00"
    >
    > revise mi configuración regional y esta todo correcto separador de miles , y separador de decimal .
    >
    > pero me sigue saliendo el valor con punto 5.000 cuando debería ser 5,000

    Hola:

    Si comentas que en la configuración regional de tu sistema operativo el separador de miles es la coma (,) y el separador decimal es el punto (.), no veo yo donde está el problema, salvo que en el formato asignado a la propiedad Format de la columna estás utilizando el mismo carácter para especificar tanto el separador de miles como el separador decimal.

    Si deseas que se especifiquen también los decimales, entiendo que lo correcto sería asignar el punto como carácter separador de decimales a la cadena de caracteres:

    DataGridView1.Columns(4).DefaultCellStyle.Format = "#,##0.00"

    Y al asignar explícitamente un formato de cadena personalizado, entiendo que da igual los caracteres que tengas establecidos en la configuración regional de tu sistema operativo.

    Doy por hecho que la quinta columna (Columns(4)) del control DataGridView está enlazada a un origen de datos (un objeto DataTable, por ejemplo) cuyo tipo de dato es NUMÉRICO, porque si el tipo de dato es TEXTO, pocas cadenas vas a poder formatear aunque el valor sean números.

    En la captura de pantalla anterior, el control DataGridView está enlazado a un objeto DataTable, cuya columna es del tipo Decimal, y el resultado formateado que aparece se debe al asignar a la propiedad Format la cadena #,##0.00, siendo la configuración regional de mi sistema operativo español de España, donde el carácter decimal es la coma y el carácter separador de miles el punto.

    Aplicar formato a tipos en .NET

    Si deseas realizar la prueba que yo he hecho, inicia un nuevo proyecto de Visual Basic, inserta en el formulario de inicio un control Button y un control DataGridView, y copia/pega el siguiente código:

    Public Class Form1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Try
                DataGridView1.DataSource = CreateDataTable()
                DataGridView1.Columns(0).DefaultCellStyle.Format = "#,##0.00"
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    
        Private Shared Function CreateDataTable() As DataTable
    
            Dim dt As New DataTable()
            Dim dc As New DataColumn("Numeros", Type.GetType("System.Decimal"))
            dt.Columns.Add(dc)
            Return dt
    
        End Function
    
    End Class

    Fíjate que la única columna del objeto DataTable es del tipo System.Decimal. Si cambias el tipo de dato a System.String, de nada sirve que le asignes a la columna del control DataGridView un formato numérico personalizado, ya que no se formatearán los valores aunque estos sean números.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    jueves, 21 de junio de 2018 9:31
    Moderador