none
diferentes propiedades en Columnas de Datagridview RRS feed

  • Pregunta

  • Buenas Tardes:

    Estoy realizando mi primer user control basado en un datagridview necesito en este user control que tengan las columnas propiedades de solo entero, decimales y conversión, como esta en la imagen ya están las propiedades, pero al tratar de usar las propiedades para cada una de las columnas solo toman las propiedades de la ultima columna; es decir si la columna 1 es decimal la columna 2 es conversión y la columna 3 es letra las variables solamente toman las propiedades de la columna 3 para todas.

    viernes, 20 de noviembre de 2015 0:36

Respuestas

  • Creo que el problema está en la forma de pasar los valores de las propiedades de un elemento a otro.

    Lo que yo haría es definir los valores únicamente en la columna y que tanto la celda como el control de edición lo recuperen de ésta.

    Creo que este ejemplo te podría resultar interesante:

    DataGridView. Columna para números con decimales

    Con esa modificación el código vendría a quedar algo así:

    #Region "Clase para hacer una columna numérica"
    Public Class DataGridViewNumericColumn2
        Inherits DataGridViewColumn
    
    #Region "Properties"
        
        Private mMaxInputlength As Integer
    
        Public Property AllowDecimal As Boolean
    
        Public Property AllowMinus As Boolean
    
        Public Property AllowDateSep As Boolean
    
        Public Property MaxInputLength As Integer
            Get
                Return mMaxInputlength
            End Get
            Set
                If value < 0 Then Throw New ArgumentOutOfRangeException()
    
                mMaxInputlength = value
                CType(CellTemplate, DataGridViewNumericTextBoxCell2).MaxInputLength = mMaxInputlength
            End Set
        End Property
    
    #End Region
    
        Public Sub New()
            MyBase.New(New DataGridViewNumericTextBoxCell2())
        End Sub
    
        Public Sub New(dec As Boolean, min As Boolean, sep As Boolean, len As Integer)
            MyBase.New(New DataGridViewNumericTextBoxCell2())
            AllowDecimal = dec
            AllowMinus = min
            AllowDateSep = sep
            MaxInputLength = len
        End Sub
    
        Public Overrides Property CellTemplate() As DataGridViewCell
            Get
                Return MyBase.CellTemplate
            End Get
            Set
                ' Asegúrese que la plantilla es un celda de tipo numérica.
                If (Value IsNot Nothing) AndAlso Not Value.GetType().IsAssignableFrom(GetType(DataGridViewNumericTextBoxCell2)) Then
                    Throw New InvalidCastException("Debe ser una celda de tipo Numérica")
                End If
                MyBase.CellTemplate = Value
            End Set
        End Property
    
        Public Overrides Function Clone() As Object
            Dim dgvntb As DataGridViewNumericColumn2 = CType(MyBase.Clone, DataGridViewNumericColumn2)
    
            dgvntb.AllowDateSep = Me.AllowDateSep
            dgvntb.AllowDecimal = Me.AllowDecimal
            dgvntb.AllowMinus = Me.AllowMinus
            dgvntb.MaxInputLength = Me.MaxInputLength
            Return dgvntb
        End Function
    End Class
    #End Region
    
    #Region "Clase para hacer una celda numerica"
    Public Class DataGridViewNumericTextBoxCell2
        Inherits DataGridViewTextBoxCell
    
    #Region "Properties"
        Public ReadOnly Property AllowDecimal() As Boolean
            Get
                If OwningColumn Is Nothing Then
                    Return False
                Else
                    Return CType(OwningColumn, DataGridViewNumericColumn2).AllowDecimal
                End If
            End Get
        End Property
    
        Public ReadOnly Property AllowMinus() As Boolean
            Get
                If OwningColumn Is Nothing Then
                    Return False
                Else
                    Return CType(OwningColumn, DataGridViewNumericColumn2).AllowMinus
                End If
            End Get
        End Property
    
        Public ReadOnly Property AllowDateSep() As Boolean
            Get
                If OwningColumn Is Nothing Then
                    Return False
                Else
                    Return CType(OwningColumn, DataGridViewNumericColumn2).AllowDateSep
                End If
            End Get
        End Property
    
        Public Overrides Property MaxInputLength() As Integer
            Get
                If OwningColumn Is Nothing Then
                    Return MyBase.MaxInputLength
                Else
                    Return CType(OwningColumn, DataGridViewNumericColumn2).MaxInputLength
                End If
            End Get
            Set
                MyBase.MaxInputLength = Value
            End Set
        End Property
    
    #End Region
        Public Sub New()
            MyBase.New()
        End Sub
    
        Public Overrides ReadOnly Property EditType() As Type
            Get
                Return GetType(DataGridViewNumericEditingControl2)
            End Get
        End Property
    
        Public Overrides ReadOnly Property ValueType() As Type
            Get
                Return GetType(Decimal)
            End Get
        End Property
    
        Public Overrides ReadOnly Property DefaultNewRowValue() As Object
            Get
                Return ""
            End Get
        End Property
    
        Public Overrides Sub InitializeEditingControl(rowIndex As Integer, initialFormattedValue As Object, dataGridViewCellStyle As DataGridViewCellStyle)
            MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)
        End Sub
    
    End Class
    
    #End Region
    
    #Region "Clase para editar celdas numéricas"
    Public Class DataGridViewNumericEditingControl2
        Inherits DataGridViewTextBoxEditingControl
    
        Private Const mDec As Char = CChar(".")
        Private Const mMinus As Char = "-"c
        Private Const mDateSep As Char = "/"c
    
    #Region "Propriedades"
        Public ReadOnly Property AllowDecimal() As Boolean
            Get
                Return CType(EditingControlDataGridView.CurrentCell, DataGridViewNumericTextBoxCell2).AllowDecimal
            End Get
        End Property
    
        Public ReadOnly Property AllowMinus() As Boolean
            Get
                Return CType(EditingControlDataGridView.CurrentCell, DataGridViewNumericTextBoxCell2).AllowMinus
            End Get
        End Property
    
        Public ReadOnly Property AllowDateSep() As Boolean
            Get
                Return CType(EditingControlDataGridView.CurrentCell, DataGridViewNumericTextBoxCell2).AllowDateSep
            End Get
        End Property
    
        Public ReadOnly Property MaxInputLength() As Integer
            Get
                Return CType(EditingControlDataGridView.CurrentCell, DataGridViewNumericTextBoxCell2).MaxInputLength
            End Get
        End Property
    #End Region
    
        Public Sub New()
            MyBase.New()
        End Sub
    
        Protected Overrides Sub OnKeyPress(e As KeyPressEventArgs)
            If e.KeyChar < "0"c OrElse e.KeyChar > "9"c Then
                If e.KeyChar <> Convert.ToChar(Keys.Back) Then
                    If AllowDecimal AndAlso e.KeyChar = mDec _
                      OrElse AllowMinus AndAlso e.KeyChar = mMinus _
                      OrElse AllowDateSep AndAlso e.KeyChar = mDateSep Then
                        MyBase.OnKeyPress(e)
                    Else
                        e.Handled = True
                    End If
                Else
                    MyBase.OnKeyPress(e)
                End If
            Else
                MyBase.OnKeyPress(e)
            End If
        End Sub
    
        Protected Overrides Sub OnKeyDown(e As KeyEventArgs)
            If Text.Length >= MaxInputLength Then
                e.Handled = True
            Else
                MyBase.OnKeyDown(e)
            End If
    
        End Sub
    End Class
    
    
    #End Region


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta LuisMir lunes, 7 de diciembre de 2015 22:39
    jueves, 3 de diciembre de 2015 12:12

Todas las respuestas

  • Hola LuisMir,

    Para que puedas editar las propiedades de cada una de las columnas y su presentación o formato individual reliza lo siguiente:

    1. Seleccionas la grilla 

    2. Picas en la parte superior derecha de la grilla seleccionada un texto u opción llamada "Editar Columnas"

    3. Cuando salga el cuadro pequeño de las propiedades ubicate en el campo que quieras editar.

    4. En la parte derecha despues de seleccionar la columna de tu grilla ve a la parte superior de las opciones de esa grilla y selecciona la primer opción llamada "DefaultCellStyle"

    5. Configurar según la necesidad.

    Saludos, espero te sirva


    Jairo Garz&#243;n Forero - MSDN.COM/ES-CO

    sábado, 21 de noviembre de 2015 18:10
  • Hola LuisMir,

    Para que puedas editar las propiedades de cada una de las columnas y su presentación o formato individual reliza lo siguiente:

    1. Seleccionas la grilla 

    2. Picas en la parte superior derecha de la grilla seleccionada un texto u opción llamada "Editar Columnas"

    3. Cuando salga el cuadro pequeño de las propiedades ubicate en el campo que quieras editar.

    4. En la parte derecha despues de seleccionar la columna de tu grilla ve a la parte superior de las opciones de esa grilla y selecciona la primer opción llamada "DefaultCellStyle"

    5. Configurar según la necesidad.

    Saludos, espero te sirva


    Jairo Garz&#243;n Forero - MSDN.COM/ES-CO


    Agradezco el tiempo de contestar la pregunta, pero lo que necesito es que con las propiedades que yo le estoy dando al datagrid establezca las propiedades en cada una de las columnas y estas puedan ser diferentes.
    lunes, 23 de noviembre de 2015 21:45
  • hola

    que modificacion aplicas sobre el datagridview base para que cambie el comportamiento de las columnas ?

    estas exponiendo alguna propiedad creada por ti ? si es asi valida como trabajas la coleccion y creas las instancias de cada columna

    recuerda que el new de cada columna debe ser lo ams local posible, no definas un objeto columan de forma global y lo reutilices en cada operacion

    o sea si realzias algun Add() de la columna a una coleccion el new que realices de esa columan, la declaracion debe ser en un ambito bien local

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 24 de noviembre de 2015 13:09
  • hola

    que modificacion aplicas sobre el datagridview base para que cambie el comportamiento de las columnas ?

    estas exponiendo alguna propiedad creada por ti ? si es asi valida como trabajas la coleccion y creas las instancias de cada columna

    recuerda que el new de cada columna debe ser lo ams local posible, no definas un objeto columan de forma global y lo reutilices en cada operacion

    o sea si realzias algun Add() de la columna a una coleccion el new que realices de esa columan, la declaracion debe ser en un ambito bien local

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Gracias Leandro, copie un ejemplo que hace lo que necesito pero tiene el mismo problema que yo tengo, no guarda las propiedades para cada columna en particular; anexo el código para ver si me pueden ayudar; Lo que quiero hacer es tener columnas numéricas de tipo decimal otra de tipo entero y asi de otros tipos.

    Agradezco de antemano su ayuda

    #Region "Clase para hacer una columna numérica"
        Public Class DataGridViewNumericColumn
            Inherits System.Windows.Forms.DataGridViewColumn
    
            Private mAllowDecimal As Boolean
            Private mAllowMinus As Boolean
            Private mAllowDateSep As Boolean
            Private mMaxInputlength As Integer
            Private mCelltemplate As DataGridViewNumericTextBoxCell
    
    #Region "Properties"
            Public Property AllowDecimal() As Boolean
                Get
                    Return mAllowDecimal
                End Get
                Set(ByVal value As Boolean)
                    mAllowDecimal = value
                    mCelltemplate.AllowDecimal = value
                End Set
            End Property
    
            Public Property AllowMinus() As Boolean
                Get
                    Return mAllowMinus
                End Get
                Set(ByVal value As Boolean)
                    mAllowMinus = value
                    mCelltemplate.AllowMinus = value
                End Set
            End Property
    
            Public Property AllowDateSep() As Boolean
                Get
                    Return mAllowDateSep
                End Get
                Set(ByVal value As Boolean)
                    mAllowDateSep = value
                    mCelltemplate.AllowDateSep = value
                End Set
            End Property
    
            Public Property MaxInputLength() As Integer
                Get
                    Return mMaxInputlength
                End Get
                Set(ByVal value As Integer)
                    mMaxInputlength = value
                    mCelltemplate.MaxInputLength = value
                End Set
            End Property
    #End Region
    
            Public Sub New()
                MyBase.New(New DataGridViewNumericTextBoxCell())
                mCelltemplate = CType(MyBase.CellTemplate, DataGridViewNumericTextBoxCell)
            End Sub
    
            Public Sub New(ByVal dec As Boolean, ByVal min As Boolean, ByVal sep As Boolean, ByVal len As Integer)
                MyBase.New(New DataGridViewNumericTextBoxCell(dec, min, sep, len))
                mCelltemplate = CType(MyBase.CellTemplate, DataGridViewNumericTextBoxCell)
                Me.mAllowDecimal = dec
                Me.mAllowMinus = min
                Me.mAllowDateSep = sep
                Me.mMaxInputlength = len
            End Sub
    
            Public Overrides Property CellTemplate() As DataGridViewCell
                Get
                    Return MyBase.CellTemplate
                End Get
                Set(ByVal value As DataGridViewCell)
                    ' Asegúrese que la plantilla es un celda de tipo numérica.
                    If (value IsNot Nothing) AndAlso Not value.GetType().IsAssignableFrom(GetType(DataGridViewNumericTextBoxCell)) Then
                        Throw New InvalidCastException("Debe ser una celda de tipo Numérica")
                    End If
                    MyBase.CellTemplate = value
                End Set
            End Property
    
            Public Overrides Function Clone() As Object
                Dim dgvntb As DataGridViewNumericColumn = CType(MyBase.Clone, DataGridViewNumericColumn)
    
                dgvntb.AllowDateSep = Me.AllowDateSep
                dgvntb.AllowDecimal = Me.AllowDecimal
                dgvntb.AllowMinus = Me.AllowMinus
                dgvntb.MaxInputLength = Me.mMaxInputlength
                Return dgvntb
            End Function
    
        End Class
    #End Region
    
    #Region "Clase para hacer una celda numerica"
        Public Class DataGridViewNumericTextBoxCell
            Inherits System.Windows.Forms.DataGridViewTextBoxCell
    
            Private mMaxInputlength As Integer
            Private mAllowDecimal As Boolean
            Private mAllowMinus As Boolean
            Private mAllowDateSep As Boolean
    #Region "Properties"
            Public Property AllowDecimal() As Boolean
                Get
                    Return mAllowDecimal
                End Get
                Set(ByVal value As Boolean)
                    mAllowDecimal = value
                End Set
            End Property
    
            Public Property AllowMinus() As Boolean
                Get
                    Return mAllowMinus
                End Get
                Set(ByVal value As Boolean)
                    mAllowMinus = value
                End Set
            End Property
    
            Public Property AllowDateSep() As Boolean
                Get
                    Return mAllowDateSep
                End Get
                Set(ByVal value As Boolean)
                    mAllowDateSep = value
                End Set
            End Property
    
            Public Overrides Property MaxInputLength() As Integer
                Get
                    Return mMaxInputlength
                End Get
                Set(ByVal value As Integer)
                    mMaxInputlength = value
                End Set
            End Property
    #End Region
            Public Sub New()
                MyBase.New()
            End Sub
            Public Sub New(ByVal dp As Boolean, ByVal sign As Boolean, ByVal datesep As Boolean, ByVal len As Integer)
                MyBase.New()
                Me.mAllowDecimal = dp
                Me.mAllowMinus = sign
                Me.mAllowDateSep = datesep
                Me.mMaxInputlength = len
            End Sub
    
            Public Overrides ReadOnly Property EditType() As System.Type
                Get
                    Return GetType(DataGridViewNumericEditingControl)
                End Get
            End Property
    
            Public Overrides ReadOnly Property ValueType() As System.Type
                Get
                    Return GetType(System.Decimal)
                End Get
            End Property
    
            Public Overrides ReadOnly Property DefaultNewRowValue() As Object
                Get
                    Return ""
                End Get
            End Property
    
            Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, ByVal initialFormattedValue As Object, ByVal dataGridViewCellStyle As System.Windows.Forms.DataGridViewCellStyle)
                MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)
    
                Dim ctl As DataGridViewNumericEditingControl = CType(DataGridView.EditingControl, DataGridViewNumericEditingControl)
                ctl.AllowDecimal = mAllowDecimal
                ctl.AllowMinus = mAllowMinus
                ctl.AllowDateSep = mAllowDateSep
                ctl.MaxInputLength = mMaxInputlength            
            End Sub
    
            Public Overrides Function Clone() As Object
                Dim dgvntb As DataGridViewNumericTextBoxCell = CType(MyBase.Clone, DataGridViewNumericTextBoxCell)
                dgvntb.AllowDecimal = Me.AllowDecimal
                dgvntb.AllowMinus = Me.AllowMinus
                dgvntb.AllowDateSep = Me.AllowDateSep
                dgvntb.MaxInputLength = Me.MaxInputLength
                Return dgvntb
            End Function
        End Class
    #End Region
    
    #Region "Clase para editar celdas numéricas"
        Public Class DataGridViewNumericEditingControl
            Inherits DataGridViewTextBoxEditingControl
    
            Private Const mDec As Char = CChar(".")
            Private Const mMinus As Char = "-"c
            Private Const mDateSep As Char = "/"c
            Private mAllowDecimal As Boolean
            Private mAllowMinus As Boolean
            Private mAllowDateSep As Boolean
            Private mMaxInputlength As Integer
    
    #Region "Propriedades"
            Public Property AllowDecimal() As Boolean
                Get
                    Return mAllowDecimal
                End Get
                Set(ByVal value As Boolean)
                    mAllowDecimal = value
                End Set
            End Property
    
            Public Property AllowMinus() As Boolean
                Get
                    Return mAllowMinus
                End Get
                Set(ByVal value As Boolean)
                    mAllowMinus = value
                End Set
            End Property
    
            Public Property AllowDateSep() As Boolean
                Get
                    Return mAllowDateSep
                End Get
                Set(ByVal value As Boolean)
                    mAllowDateSep = value
                End Set
            End Property
    
            Public Property MaxInputLength() As Integer
                Get
                    Return mMaxInputlength
                End Get
                Set(ByVal value As Integer)
                    mMaxInputlength = value
                End Set
            End Property
    #End Region
    
            Public Sub New()
                MyBase.New()
            End Sub
            Public Sub New(ByVal dec As Boolean, ByVal min As Boolean, ByVal sla As Boolean, ByVal len As Integer)
                MyBase.New()
                mAllowDecimal = dec
                mAllowMinus = min
                mAllowDateSep = sla
                mMaxInputlength = len
            End Sub
    
            Protected Overrides Sub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
                If e.KeyChar < "0"c OrElse e.KeyChar > "9"c Then
                    If e.KeyChar <> Convert.ToChar(System.Windows.Forms.Keys.Back) Then
                        If mAllowDecimal AndAlso e.KeyChar = mDec _
                          OrElse mAllowMinus AndAlso e.KeyChar = mMinus _
                          OrElse mAllowDateSep AndAlso e.KeyChar = mDateSep Then
                            MyBase.OnKeyPress(e)
                        Else
                            e.Handled = True
                        End If
                    Else
                        MyBase.OnKeyPress(e)
                    End If
                Else
                    MyBase.OnKeyPress(e)
                End If
            End Sub
            Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
                If Me.Text.Length >= mMaxInputlength Then
                    e.Handled = True
                Else
                    MyBase.OnKeyDown(e)
                End If
    
            End Sub
        End Class
    
    
    #End Región
    
    
    
    

    jueves, 26 de noviembre de 2015 1:03
  • Para eso que tu quieres mi amigo, mejor olvídate del diseñador, mira te dejo un vídeo donde te explico como llenar un DataGridView a puro código, a palito.
     Como llenar un DataGridView Manualmente
    domingo, 29 de noviembre de 2015 21:02
  • Para eso que tu quieres mi amigo, mejor olvídate del diseñador, mira te dejo un vídeo donde te explico como llenar un DataGridView a puro código, a palito.
     Como llenar un DataGridView Manualmente

    Agradezco el tiempo que te tomaste en tratar de responder la pregunta, pero seguiré tratando que funcione como lo necesito; saludos
    miércoles, 2 de diciembre de 2015 16:47
  • Creo que el problema está en la forma de pasar los valores de las propiedades de un elemento a otro.

    Lo que yo haría es definir los valores únicamente en la columna y que tanto la celda como el control de edición lo recuperen de ésta.

    Creo que este ejemplo te podría resultar interesante:

    DataGridView. Columna para números con decimales

    Con esa modificación el código vendría a quedar algo así:

    #Region "Clase para hacer una columna numérica"
    Public Class DataGridViewNumericColumn2
        Inherits DataGridViewColumn
    
    #Region "Properties"
        
        Private mMaxInputlength As Integer
    
        Public Property AllowDecimal As Boolean
    
        Public Property AllowMinus As Boolean
    
        Public Property AllowDateSep As Boolean
    
        Public Property MaxInputLength As Integer
            Get
                Return mMaxInputlength
            End Get
            Set
                If value < 0 Then Throw New ArgumentOutOfRangeException()
    
                mMaxInputlength = value
                CType(CellTemplate, DataGridViewNumericTextBoxCell2).MaxInputLength = mMaxInputlength
            End Set
        End Property
    
    #End Region
    
        Public Sub New()
            MyBase.New(New DataGridViewNumericTextBoxCell2())
        End Sub
    
        Public Sub New(dec As Boolean, min As Boolean, sep As Boolean, len As Integer)
            MyBase.New(New DataGridViewNumericTextBoxCell2())
            AllowDecimal = dec
            AllowMinus = min
            AllowDateSep = sep
            MaxInputLength = len
        End Sub
    
        Public Overrides Property CellTemplate() As DataGridViewCell
            Get
                Return MyBase.CellTemplate
            End Get
            Set
                ' Asegúrese que la plantilla es un celda de tipo numérica.
                If (Value IsNot Nothing) AndAlso Not Value.GetType().IsAssignableFrom(GetType(DataGridViewNumericTextBoxCell2)) Then
                    Throw New InvalidCastException("Debe ser una celda de tipo Numérica")
                End If
                MyBase.CellTemplate = Value
            End Set
        End Property
    
        Public Overrides Function Clone() As Object
            Dim dgvntb As DataGridViewNumericColumn2 = CType(MyBase.Clone, DataGridViewNumericColumn2)
    
            dgvntb.AllowDateSep = Me.AllowDateSep
            dgvntb.AllowDecimal = Me.AllowDecimal
            dgvntb.AllowMinus = Me.AllowMinus
            dgvntb.MaxInputLength = Me.MaxInputLength
            Return dgvntb
        End Function
    End Class
    #End Region
    
    #Region "Clase para hacer una celda numerica"
    Public Class DataGridViewNumericTextBoxCell2
        Inherits DataGridViewTextBoxCell
    
    #Region "Properties"
        Public ReadOnly Property AllowDecimal() As Boolean
            Get
                If OwningColumn Is Nothing Then
                    Return False
                Else
                    Return CType(OwningColumn, DataGridViewNumericColumn2).AllowDecimal
                End If
            End Get
        End Property
    
        Public ReadOnly Property AllowMinus() As Boolean
            Get
                If OwningColumn Is Nothing Then
                    Return False
                Else
                    Return CType(OwningColumn, DataGridViewNumericColumn2).AllowMinus
                End If
            End Get
        End Property
    
        Public ReadOnly Property AllowDateSep() As Boolean
            Get
                If OwningColumn Is Nothing Then
                    Return False
                Else
                    Return CType(OwningColumn, DataGridViewNumericColumn2).AllowDateSep
                End If
            End Get
        End Property
    
        Public Overrides Property MaxInputLength() As Integer
            Get
                If OwningColumn Is Nothing Then
                    Return MyBase.MaxInputLength
                Else
                    Return CType(OwningColumn, DataGridViewNumericColumn2).MaxInputLength
                End If
            End Get
            Set
                MyBase.MaxInputLength = Value
            End Set
        End Property
    
    #End Region
        Public Sub New()
            MyBase.New()
        End Sub
    
        Public Overrides ReadOnly Property EditType() As Type
            Get
                Return GetType(DataGridViewNumericEditingControl2)
            End Get
        End Property
    
        Public Overrides ReadOnly Property ValueType() As Type
            Get
                Return GetType(Decimal)
            End Get
        End Property
    
        Public Overrides ReadOnly Property DefaultNewRowValue() As Object
            Get
                Return ""
            End Get
        End Property
    
        Public Overrides Sub InitializeEditingControl(rowIndex As Integer, initialFormattedValue As Object, dataGridViewCellStyle As DataGridViewCellStyle)
            MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)
        End Sub
    
    End Class
    
    #End Region
    
    #Region "Clase para editar celdas numéricas"
    Public Class DataGridViewNumericEditingControl2
        Inherits DataGridViewTextBoxEditingControl
    
        Private Const mDec As Char = CChar(".")
        Private Const mMinus As Char = "-"c
        Private Const mDateSep As Char = "/"c
    
    #Region "Propriedades"
        Public ReadOnly Property AllowDecimal() As Boolean
            Get
                Return CType(EditingControlDataGridView.CurrentCell, DataGridViewNumericTextBoxCell2).AllowDecimal
            End Get
        End Property
    
        Public ReadOnly Property AllowMinus() As Boolean
            Get
                Return CType(EditingControlDataGridView.CurrentCell, DataGridViewNumericTextBoxCell2).AllowMinus
            End Get
        End Property
    
        Public ReadOnly Property AllowDateSep() As Boolean
            Get
                Return CType(EditingControlDataGridView.CurrentCell, DataGridViewNumericTextBoxCell2).AllowDateSep
            End Get
        End Property
    
        Public ReadOnly Property MaxInputLength() As Integer
            Get
                Return CType(EditingControlDataGridView.CurrentCell, DataGridViewNumericTextBoxCell2).MaxInputLength
            End Get
        End Property
    #End Region
    
        Public Sub New()
            MyBase.New()
        End Sub
    
        Protected Overrides Sub OnKeyPress(e As KeyPressEventArgs)
            If e.KeyChar < "0"c OrElse e.KeyChar > "9"c Then
                If e.KeyChar <> Convert.ToChar(Keys.Back) Then
                    If AllowDecimal AndAlso e.KeyChar = mDec _
                      OrElse AllowMinus AndAlso e.KeyChar = mMinus _
                      OrElse AllowDateSep AndAlso e.KeyChar = mDateSep Then
                        MyBase.OnKeyPress(e)
                    Else
                        e.Handled = True
                    End If
                Else
                    MyBase.OnKeyPress(e)
                End If
            Else
                MyBase.OnKeyPress(e)
            End If
        End Sub
    
        Protected Overrides Sub OnKeyDown(e As KeyEventArgs)
            If Text.Length >= MaxInputLength Then
                e.Handled = True
            Else
                MyBase.OnKeyDown(e)
            End If
    
        End Sub
    End Class
    
    
    #End Region


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta LuisMir lunes, 7 de diciembre de 2015 22:39
    jueves, 3 de diciembre de 2015 12:12
  • Gracias Asier por tu tiempo y conocimientos; fue de mucha ayuda tu respuesta
    lunes, 7 de diciembre de 2015 22:39