none
Dar Formato a Iban con guiones RRS feed

  • Pregunta

  • Hola:

    Dentro de un datagridview tengo una celda que contiene los iban bancarios, el problema es que está todo el iban correlativo y quisiera que al salir de la celda tuviese el siguiente formato "ES00-0000-0000-0000-0000-0000" para que su lectura sea más comoda y al entrar en dicha celda se quiten los guiones y quede todo seguido.

    Un Saludo y gracias.

    viernes, 13 de mayo de 2016 19:28

Respuestas

  • "elturle" preguntó:

    > Dentro de un datagridview tengo una celda que contiene los iban bancarios, el
    > problema es que está todo el iban correlativo ...

    Es decir, que se supone que en la tabla de la base de datos los valores del IBAN no están formateados.

    > ... y quisiera que al salir de la celda tuviese el siguiente formato "ES00-0000-0000-0000-0000-0000"
    > para que su lectura sea más comoda y al entrar en dicha celda se quiten los guiones y quede
    > todo seguido.

    Si los valores por defecto del IBAN no están formateados, digo yo que tendrás que formatearlos cuando asignes la propiedad DataSource del control DataGridView, para que todos ellos se vean con el formato ES00-0000-0000-0000-0000-0000.

    Inserta en ese formulario el siguiente procedimiento para formatear la celda que contiene el valor del IBAN:

        Private Sub FormatCellValue(currentRow As DataGridViewRow)
    
            If (currentRow Is Nothing) Then Return
    
            Dim value As String = TryCast(currentRow.Cells(1).Value, String)
            If (Not value Is Nothing) Then
                Dim letras As String = value.Substring(0, 4)
                Dim numeros As Decimal = CDec(value.Substring(4))
                currentRow.Cells(1).Value = String.Format("{0}-{1:0000-0000-0000-0000-0000}", letras, numeros)
            End If
    
        End Sub

    Observa la siguiente línea:

        Dim value As String = TryCast(currentRow.Cells(1).Value, String)

    En este ejemplo, asumo que los valores del IBAN aparecen en la segunda columna del control DataGridView, es decir, la que tiene por índice 1. Modifica dicho valor para asignarle el índice correcto de la columna.

    Ahora, suponiendo que tienes un objeto DataTable enlazado con el control DataGridView, una vez que le asignes su propiedad DataSource llamarías al procedimiento FormatCellValue para formatear TODOS los valores IBAN:

        ' Enlazamos el control DataGridView con un objeto DataTable
        ' previamente relleno con los datos de la tabla.
        '
        DataGridView1.DataSource = objetoDataTable
    
        ' Mientras recorremos las filas del control DataGridView
        ' vamos formateando el valor del IBAN.
        '
        For Each row As DataGridViewRow In DataGridView1.Rows
            FormatCellValue(row)
        Next

    ¡Bueno! Ya tienes todos los valores IBAN correctamente formateados. Ahora el tema consiste que cuando se "entre en dicha celda se quiten los guiones y quede todo seguido".

    Para ello, en el evento CellEnter del control DataGridView ejecutarías lo siguiente:

        Private Sub DataGridView1_CellEnter(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
    
            Dim currentRow As DataGridViewRow = DataGridView1.CurrentRow
            If (currentRow Is Nothing) Then Return
    
            Dim value As String = TryCast(currentRow.Cells(1).Value, String)
            If (Not value Is Nothing) Then
                currentRow.Cells(1).Value = value.Replace("-"c, "")
            End If
    
        End Sub

    Y para que cuando se abandone la fila actual del control DataGridView (no la celda actual) aparezca de nuevo formateado el valor del IBAN, volverías nuevamente a llamar al procedimiento FormatCellValue desde el evento RowLeave pasándole el valor de la fila actual del control DataGridView:

        Private Sub DataGridView1_RowLeave(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.RowLeave
    
            FormatCellValue(DataGridView1.CurrentRow)
    
        End Sub

    NOTA IMPORTANTE: Me he limitado a satisfacer las necesidades tal cual demandabas en tu mensaje, sin entrar en más detalles. Si observas que el resultado final no te satisface mucho, tan solo tienes que llamar al método FormatCellValue desde el evento del control DataGridView que estimes conveniente.

    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.


    sábado, 14 de mayo de 2016 7:52
    Moderador

Todas las respuestas

  • Hola,

    Puedes hacer esto :

        'Cuando inicia la edición
        Private Sub DataGridView1_CellBeginEdit(sender As Object, e As DataGridViewCellCancelEventArgs) Handles DataGridView1.CellBeginEdit
    
            Dim valor As String = DataGridView1(e.ColumnIndex, e.RowIndex).Value.ToString
            Dim resultado As String = String.Empty
    
            For i = 0 To valor.Length - 1
                If i Mod 4 = 0 And i <> 0 Then
                    resultado += "-"
                End If
                resultado += valor(i)
            Next
    
            DataGridView1(e.ColumnIndex, e.RowIndex).Value = resultado
        End Sub

    Y cuando termina de editar :

    En este caso mi columna es la primera (posición 0)

     'Cuando termina de editar
        Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
            If e.ColumnIndex = 0 Then
                DataGridView1(e.ColumnIndex, e.RowIndex).Value = DataGridView1(e.ColumnIndex, e.RowIndex).Value.ToString().Replace("-", "")
            End If
        End Sub

    Resultado :

    Así se muestra :

    Cuando entra a editar :

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 13 de mayo de 2016 19:50
  • "elturle" preguntó:

    > Dentro de un datagridview tengo una celda que contiene los iban bancarios, el
    > problema es que está todo el iban correlativo ...

    Es decir, que se supone que en la tabla de la base de datos los valores del IBAN no están formateados.

    > ... y quisiera que al salir de la celda tuviese el siguiente formato "ES00-0000-0000-0000-0000-0000"
    > para que su lectura sea más comoda y al entrar en dicha celda se quiten los guiones y quede
    > todo seguido.

    Si los valores por defecto del IBAN no están formateados, digo yo que tendrás que formatearlos cuando asignes la propiedad DataSource del control DataGridView, para que todos ellos se vean con el formato ES00-0000-0000-0000-0000-0000.

    Inserta en ese formulario el siguiente procedimiento para formatear la celda que contiene el valor del IBAN:

        Private Sub FormatCellValue(currentRow As DataGridViewRow)
    
            If (currentRow Is Nothing) Then Return
    
            Dim value As String = TryCast(currentRow.Cells(1).Value, String)
            If (Not value Is Nothing) Then
                Dim letras As String = value.Substring(0, 4)
                Dim numeros As Decimal = CDec(value.Substring(4))
                currentRow.Cells(1).Value = String.Format("{0}-{1:0000-0000-0000-0000-0000}", letras, numeros)
            End If
    
        End Sub

    Observa la siguiente línea:

        Dim value As String = TryCast(currentRow.Cells(1).Value, String)

    En este ejemplo, asumo que los valores del IBAN aparecen en la segunda columna del control DataGridView, es decir, la que tiene por índice 1. Modifica dicho valor para asignarle el índice correcto de la columna.

    Ahora, suponiendo que tienes un objeto DataTable enlazado con el control DataGridView, una vez que le asignes su propiedad DataSource llamarías al procedimiento FormatCellValue para formatear TODOS los valores IBAN:

        ' Enlazamos el control DataGridView con un objeto DataTable
        ' previamente relleno con los datos de la tabla.
        '
        DataGridView1.DataSource = objetoDataTable
    
        ' Mientras recorremos las filas del control DataGridView
        ' vamos formateando el valor del IBAN.
        '
        For Each row As DataGridViewRow In DataGridView1.Rows
            FormatCellValue(row)
        Next

    ¡Bueno! Ya tienes todos los valores IBAN correctamente formateados. Ahora el tema consiste que cuando se "entre en dicha celda se quiten los guiones y quede todo seguido".

    Para ello, en el evento CellEnter del control DataGridView ejecutarías lo siguiente:

        Private Sub DataGridView1_CellEnter(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
    
            Dim currentRow As DataGridViewRow = DataGridView1.CurrentRow
            If (currentRow Is Nothing) Then Return
    
            Dim value As String = TryCast(currentRow.Cells(1).Value, String)
            If (Not value Is Nothing) Then
                currentRow.Cells(1).Value = value.Replace("-"c, "")
            End If
    
        End Sub

    Y para que cuando se abandone la fila actual del control DataGridView (no la celda actual) aparezca de nuevo formateado el valor del IBAN, volverías nuevamente a llamar al procedimiento FormatCellValue desde el evento RowLeave pasándole el valor de la fila actual del control DataGridView:

        Private Sub DataGridView1_RowLeave(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.RowLeave
    
            FormatCellValue(DataGridView1.CurrentRow)
    
        End Sub

    NOTA IMPORTANTE: Me he limitado a satisfacer las necesidades tal cual demandabas en tu mensaje, sin entrar en más detalles. Si observas que el resultado final no te satisface mucho, tan solo tienes que llamar al método FormatCellValue desde el evento del control DataGridView que estimes conveniente.

    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.


    sábado, 14 de mayo de 2016 7:52
    Moderador
  • Muchas Gracias por vuestras respuetas.

    Un Saludo.

    sábado, 14 de mayo de 2016 12:12