none
Cambiar formato última celda en datagridview RRS feed

  • Pregunta

  • Hola a todos:

    Precisaría saber que tengo mal en este código, ya que no me cambia el formato de la última fila del datagridview.

       'cambiamos el formato de la última fila de la grilla, para el ratio
                    Dim cell As DataGridViewCell = DataGridView6.CurrentCell
                    cell = DataGridView6.Rows(DataGridView6.RowCount - 1).Cells(cell.ColumnIndex)
                    cell.Style.Format = "N2" 'Numero con 2 decimales

    El formato necesito aplicarlo a las columnas 1,2 y 3. La 0 es de texto.

    Un saludo a todos y gracias.

    Gemma


    martes, 10 de mayo de 2016 13:46

Respuestas

  • "gemma_campillo" escribió:

    > Precisaría saber que tengo mal en este código, ya que no me cambia el formato
    > de la última fila del datagridview.
    >

    > Dim cell As DataGridViewCell = DataGridView6.CurrentCell

    Estás referenciando la celda que actualmente se encuentra activa y que puede ser cualquiera de las existentes en el control DataGridView.

    > cell = DataGridView6.Rows(DataGridView6.RowCount - 1).Cells(cell.ColumnIndex)

    Ahora, nuevamente estás referenciando la celda con el índice que tiene la celda actual, que puede ser el índice 1, 2, 6, etc., es decir, el índice que tiene la celda actualmente seleccionada.

    > cell.Style.Format = "N2" 'Numero con 2 decimales

    Aplicas el formato numérico a la celda.

    > El formato necesito aplicarlo a las columnas 1,2 y 3. La 0 es de texto.

    Si tu intención es aplicar el formato a las celdas con índices 1, 2 y 3 (la segunda, tercera y cuarta) correspondientes a la última fila del control DataGridView, entiendo que no lo estás haciendo bien. Prueba de la siguiente manera:

            ' Referenciamos la última fila del control DataGridView. Se comprende que el
            ' usuario NO PUEDE añadir nuevas filas (DataGridView6.AllowUserToAddRows = False)
            '
            Dim ultimaFila As DataGridViewRow = DataGridView6.Rows(DataGridView6.RowCount - 1)
    
            ' Creamos una matriz con las celdas de la última fila a las que queremos aplicarle el formato de celda.
            '
            Dim celdas As DataGridViewCell() = {ultimaFila.Cells(1), ultimaFila.Cells(2), ultimaFila.Cells(3)}
    
            ' Conforme recorremos la matriz vamos aplicando el formato a cada celda individual.
            '
            For Each celda As DataGridViewCell In celdas
                celda.Style.Format = "N2" ' Numero con 2 decimales
                celda.Style.BackColor = Color.Bisque  ' En el ejemplo, cambiamos el color de fondo de las celdas
            Next

    ¿Que no te apetece declarar una matriz y recorrer un bucle For Each ... Next? Asígnale directamente el estilo a las celdas de la fila que desees:

        ultimaFila.Cells(1).Style.Format = "N2"
        ultimaFila.Cells(2).Style.Format = "N2"
        ultimaFila.Cells(3).Style.Format = "N2"

    Por último comentar que, si el usuario puede añadir nuevas filas en el control DataGridView, entonces tendrías que referenciar la penúltima fila, ya que la última fila se comprende que es la de los nuevos registros:

        Dim ultimaFila As DataGridViewRow = DataGridView6.Rows(DataGridView6.RowCount - 2)


    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.





    martes, 10 de mayo de 2016 14:48
    Moderador

Todas las respuestas

  • "gemma_campillo" escribió:

    > Precisaría saber que tengo mal en este código, ya que no me cambia el formato
    > de la última fila del datagridview.
    >

    > Dim cell As DataGridViewCell = DataGridView6.CurrentCell

    Estás referenciando la celda que actualmente se encuentra activa y que puede ser cualquiera de las existentes en el control DataGridView.

    > cell = DataGridView6.Rows(DataGridView6.RowCount - 1).Cells(cell.ColumnIndex)

    Ahora, nuevamente estás referenciando la celda con el índice que tiene la celda actual, que puede ser el índice 1, 2, 6, etc., es decir, el índice que tiene la celda actualmente seleccionada.

    > cell.Style.Format = "N2" 'Numero con 2 decimales

    Aplicas el formato numérico a la celda.

    > El formato necesito aplicarlo a las columnas 1,2 y 3. La 0 es de texto.

    Si tu intención es aplicar el formato a las celdas con índices 1, 2 y 3 (la segunda, tercera y cuarta) correspondientes a la última fila del control DataGridView, entiendo que no lo estás haciendo bien. Prueba de la siguiente manera:

            ' Referenciamos la última fila del control DataGridView. Se comprende que el
            ' usuario NO PUEDE añadir nuevas filas (DataGridView6.AllowUserToAddRows = False)
            '
            Dim ultimaFila As DataGridViewRow = DataGridView6.Rows(DataGridView6.RowCount - 1)
    
            ' Creamos una matriz con las celdas de la última fila a las que queremos aplicarle el formato de celda.
            '
            Dim celdas As DataGridViewCell() = {ultimaFila.Cells(1), ultimaFila.Cells(2), ultimaFila.Cells(3)}
    
            ' Conforme recorremos la matriz vamos aplicando el formato a cada celda individual.
            '
            For Each celda As DataGridViewCell In celdas
                celda.Style.Format = "N2" ' Numero con 2 decimales
                celda.Style.BackColor = Color.Bisque  ' En el ejemplo, cambiamos el color de fondo de las celdas
            Next

    ¿Que no te apetece declarar una matriz y recorrer un bucle For Each ... Next? Asígnale directamente el estilo a las celdas de la fila que desees:

        ultimaFila.Cells(1).Style.Format = "N2"
        ultimaFila.Cells(2).Style.Format = "N2"
        ultimaFila.Cells(3).Style.Format = "N2"

    Por último comentar que, si el usuario puede añadir nuevas filas en el control DataGridView, entonces tendrías que referenciar la penúltima fila, ya que la última fila se comprende que es la de los nuevos registros:

        Dim ultimaFila As DataGridViewRow = DataGridView6.Rows(DataGridView6.RowCount - 2)


    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.





    martes, 10 de mayo de 2016 14:48
    Moderador
  • Hola maestro:

    Como estás?.

    Va perfecto como siempre. Yo lo había solucionado porque al saber la fila que en este caso es siempre la misma, le he aplicado el formato y va bien, ahora, con tu código lo tengo perfecto, ya que funcionará siempre sea cual sea la última fila.

    Enrique querido amigo, muchas gracias como siempre.

    Es una gozada tenerte siempre ahí.

    Un fuerte abrazo de tu amiga.

    Gemma

    martes, 10 de mayo de 2016 16:32