none
Formato en celda de datagridview no me funsiona RRS feed

  • Pregunta

  • Buenas Tardes.

    Tengo un Windows Form creado con vb.net, el cual contiene un DataGridView1, en una celda la formateo para que me queden los números así 0000 0000 0000.

    Si logro hacerlo tomando el dato de un textBox y un botón para agregarlo al DataGridView.

    El Detalle aquí es que el usuario, el dato lo escribe directamente en la grilla y solo da TAB para avanzar a la otra grilla y no respeta el formato.

    Como podría lograr que me respete el formato.

    Gracias..

    martes, 4 de julio de 2017 23:26

Todas las respuestas

  • Debes de usar la acción CellEndEdit y dentro de esa acción dar el formato que quieres, esto es, definir el formato para las columnas del DataGridView1.

    Debes tener cuidado de no llamar la funcion de dar formato al DGV si no hay renglones porque truena tu aplicacion:

            z = Form1.DataGridView1.Rows.Count

            If z = 0 then exit sub

            'aqui el formato para el DGV


    Y lo toma porque lo toma.

    Saludos

      



    • Editado gasgdl jueves, 13 de julio de 2017 22:16
    jueves, 13 de julio de 2017 22:10
  • Bueno amigo, he trabajado en tu consulta y el tema de tratar con el textbox del grid es al menos aspero, hay varios tutoriales al respecto de como funciona. Por mi parte, genere un código a partir de un MaskedTextBox en Visible False que hace de nexo para rellenar la celda. Mediante cooredenadas se hubica debajo de la celda a editar y pasa el foco al  MasckedText una vez completado el formato vuelve el foco al Grid y dando tab continua su marcha. Hay que probarlo pero a medida que se ejercita puede ser muy practico

    A nivel formulario declaramos dos integre y un boolean

    Public Class Form1
        Public a As Integer = 0
        Public b As Integer = 0
        Public Imp As Boolean = False

    En el evento CellBeginEdit del DataGridView colocamos el sigíente códig . En alguna parte del form colocamos el MasckedTextBox y configuramos la mascara en tu caso Numérico y  formato  9999 9999 9999, así solo aceptará números y con el adecuado formato

         Private Sub Dgv_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles Dgv.CellBeginEdit

            Dim c As Integer = Dgv.CurrentCell.ColumnIndex
            Dim Rec As Rectangle = Dgv.GetCellDisplayRectangle(Dgv.CurrentCell.ColumnIndex, Dgv.CurrentCell.RowIndex, False)

            If c = 4 Then
                a = Dgv.CurrentCell.ColumnIndex
                b = Dgv.CurrentCell.RowIndex
                e.Cancel = True

                Imp = True

                m_Mascara.Width = Dgv.CurrentCell.Size.Width
                m_Mascara.Height = Dgv.CurrentCell.Size.Height
                m_Mascara.Location = New Point((Rec.Location.X + Dgv.Location.X), (Rec.Location.Y + Dgv.Location.Y) + 25)
                m_Mascara.Visible = True
                m_Mascara.Focus()


            Else
                m_Mascara.Visible = False
                e.Cancel = False
                m_Mascara.Text = ""
                Imp = False

            End If
        End Sub

    Y en el evento del Mascked MaskImputRejected colocamos el resto del código

        Private Sub m_Mascara_MaskInputRejected(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MaskInputRejectedEventArgs) Handles m_Mascara.MaskInputRejected
            Dgv(a, b).Value = m_Mascara.Text
            m_Mascara.Visible = False
            m_Mascara.Text = ""
            Dgv(a, b).Selected = True
            Imp = False
            Dgv.Focus()     
        End Sub

    Hay que probarlo. Una vez el MaskedBox termine el recorido de su capacidad, cargará la celda y quedará seleccionada para dar TAB, Bueno como dije es un parche de solución pero puede ser efectiva en este caso actúa sobre la columna 5, tu la adecúas a tu necesidad

    Saludos y a probarlo






    • Editado Marcelo PF sábado, 15 de julio de 2017 0:28
    viernes, 14 de julio de 2017 15:45
  • Hola

    Podrías aplicar el formato en el evento CellEndEdit

    Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellEndEdit
            Dim cell As DataGridViewCell = dgv.Rows(e.RowIndex).Cells(e.ColumnIndex)
            cell.Value = string.Format("{0:0000 0000 0000}", Convert.ToInt32(cell.Value)) 
        End Sub

    +++++++++++++++++++++++

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    sábado, 15 de julio de 2017 2:30