Ver Mensaje Individual
  #8 (permalink)  
Antiguo 25/02/2008, 03:05
granchop
 
Fecha de Ingreso: febrero-2008
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Re: DateTimePicker en DataGridView

Código:
Public Class EditValCeldacTexto
    Inherits NetControlsAsr.cTexto
    Implements IDataGridViewEditingControl


    Private nNumeroFila As Integer
    Private oDGV As DataGridView
    Private bValorCambiado As Boolean = False


    Public Property EditingControlDataGridView() As System.Windows.Forms.DataGridView Implements System.Windows.Forms.IDataGridViewEditingControl.EditingControlDataGridView
        Get
            Return oDGV
        End Get
        Set(ByVal value As System.Windows.Forms.DataGridView)
            oDGV = value
        End Set
    End Property

    Public Property EditingControlFormattedValue() As Object Implements System.Windows.Forms.IDataGridViewEditingControl.EditingControlFormattedValue
        Get
            Return Me.Text
        End Get
        Set(ByVal value As Object)
            Me.Text = value
        End Set
    End Property

    Public Property EditingControlRowIndex() As Integer Implements System.Windows.Forms.IDataGridViewEditingControl.EditingControlRowIndex
        Get
            Return Me.nNumeroFila
        End Get
        Set(ByVal value As Integer)
            Me.nNumeroFila = value
        End Set
    End Property

    Public Property EditingControlValueChanged() As Boolean Implements System.Windows.Forms.IDataGridViewEditingControl.EditingControlValueChanged
        Get
            Return Me.bValorCambiado
        End Get
        Set(ByVal value As Boolean)
            Me.bValorCambiado = value
        End Set
    End Property

    Public ReadOnly Property EditingPanelCursor() As System.Windows.Forms.Cursor Implements System.Windows.Forms.IDataGridViewEditingControl.EditingPanelCursor
        Get
            Return MyBase.Cursor
        End Get
    End Property

    Public ReadOnly Property RepositionEditingControlOnValueChange() As Boolean Implements System.Windows.Forms.IDataGridViewEditingControl.RepositionEditingControlOnValueChange
        Get
            Return False
        End Get
    End Property

    Public Sub ApplyCellStyleToEditingControl(ByVal dataGridViewCellStyle As System.Windows.Forms.DataGridViewCellStyle) Implements System.Windows.Forms.IDataGridViewEditingControl.ApplyCellStyleToEditingControl

        Me.Font = dataGridViewCellStyle.Font
        Me.ForeColor = dataGridViewCellStyle.ForeColor
        Me.BackColor = dataGridViewCellStyle.BackColor

    End Sub

    Public Function EditingControlWantsInputKey(ByVal keyData As System.Windows.Forms.Keys, ByVal dataGridViewWantsInputKey As Boolean) As Boolean Implements System.Windows.Forms.IDataGridViewEditingControl.EditingControlWantsInputKey
        Select Case keyData And Keys.KeyCode
            Case Keys.Left, Keys.Up, Keys.Down, Keys.Right, _
         Keys.Home, Keys.End, Keys.PageDown, Keys.PageUp

                Return True
            Case Else
                Return False
        End Select

    End Function

    Public Function GetEditingControlFormattedValue(ByVal context As System.Windows.Forms.DataGridViewDataErrorContexts) As Object Implements System.Windows.Forms.IDataGridViewEditingControl.GetEditingControlFormattedValue
        'Return Me.Value.ToString("dd-MM-yyyy")
        Return Me.Text
    End Function

    Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
        bValorCambiado = True
        Me.EditingControlDataGridView.NotifyCurrentCellDirty(True)
        MyBase.OnTextChanged(e)
    End Sub

    Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) Implements System.Windows.Forms.IDataGridViewEditingControl.PrepareEditingControlForEdit

    End Sub

End Class
aqui es donde heredo de mi caja de texto con su comportamiento y demas.
Código:
Public Class ColumnacTexto
    Inherits System.Windows.Forms.DataGridViewColumn

    'Declaracion de Variables Internas
    Private _Longitud As Integer
    Private _Formato As tbFormatos
    Private _Decimales As Byte
    Private _SeparadorDec As Char
    Private _UserValues As String

    Public Overrides Property CellTemplate() As System.Windows.Forms.DataGridViewCell
        Get
            Return MyBase.CellTemplate
        End Get
        Set(ByVal value As System.Windows.Forms.DataGridViewCell)
            MyBase.CellTemplate = value
        End Set
    End Property

    Public Property Decimales() As Byte
        Get
            Return Me._Decimales
        End Get
        Set(ByVal Value As Byte)
            Me._Decimales = Value
        End Set
    End Property

    Public Property Longitud() As Integer
        Get
            Return Me._Longitud
        End Get
        Set(ByVal value As Integer)
            Me._Longitud = value
        End Set
    End Property

    Public Property SeparadorDec() As Char
        Get
            Return Me._SeparadorDec
        End Get
        Set(ByVal Value As Char)
            If Value = "." OrElse Value = "," Then
                Me._SeparadorDec = Value
            End If
        End Set
    End Property

    Public Property Formato() As tbFormatos
        Get
            Return Me._Formato
        End Get
        Set(ByVal value As tbFormatos)
            Me._Formato = value
        End Set
    End Property

    Public Property UserValues() As String
        Get
            Return Me._UserValues
        End Get
        Set(ByVal Value As String)
            Me._UserValues = Value
        End Set
    End Property

    Public Sub New()
        MyBase.New(New CeldacTexto())

    End Sub
End Class
en la clase de la columna un pequeño problemilla tengo que implementar todas las propiedades que me interesen de la caja de texto pero bueno seguimos

Código:
Public Class CeldacTexto

#Region "Propiedades SobreEscritas"

    Public Overrides ReadOnly Property EditType() As System.Type
        Get
            Return GetType(EditValCeldacTexto)
        End Get
    End Property

    Public Overrides ReadOnly Property ValueType() As System.Type
        Get
            Return GetType(String)
        End Get
    End Property

    Public Overrides ReadOnly Property DefaultNewRowValue() As Object
        Get
            Return ""
        End Get
    End Property

#End Region

#Region "Metos Sobreescritos"

    Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, ByVal initialFormattedValue As Object, ByVal dataGridViewCellStyle As DataGridViewCellStyle)
        'MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)

        Dim ctlEditorValorCelda As EditValCeldacTexto = CType(DataGridView.EditingControl, EditValCeldacTexto)
        Dim colPerso As ColumnacTexto = CType(Me.OwningColumn, ColumnacTexto)

        ctlEditorValorCelda.Decimales = colPerso.Decimales
        ctlEditorValorCelda.Longitud = colPerso.Longitud
        ctlEditorValorCelda.SeparadorDec = colPerso.SeparadorDec
        ctlEditorValorCelda.Formato = colPerso.Formato
        ctlEditorValorCelda.UserValues = colPerso.UserValues
        ctlEditorValorCelda.Text = initialFormattedValue

        MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)

    End Sub

#End Region

End Class
como veis en el Public Overrides Sub InitializeEditingControl creo las variables del editor y la columna que quiero usar y les paso las propiedades vale hasta aqui todo bien mi primer problema fue que la instruccion MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle) se encontraba al principio del metodo con lo cual la primera fila que se insertaba no obtenia la propiedades que le establecia si no las que tenia pordefecto la caja de texto bie en el form cargo es siguiente codigo para establecer las propiedades de la columna
Código:
        Dim oMCCol As New NetControlsAsr.ColumnacTexto()
        Dim oMCCol2 As New NetControlsAsr.ColumnacTexto()

        oMCCol.Width = 80
        oMCCol.Longitud = 5
        oMCCol.Formato = NetControlsAsr.tbFormatos.Enteros
        oMCCol.HeaderText = "Longitud 5"

        oMCCol2.Width = 80
        oMCCol2.Longitud = 3
        oMCCol.Formato = NetControlsAsr.tbFormatos.Enteros
        oMCCol2.HeaderText = "Longitud 3"

        Me.DataGridView1.Columns.Add(oMCCol)
        Me.DataGridView1.Columns.Add(oMCCol2)
        Me.DataGridView1.Rows.Add(4)
Hasta ahora todo bien pero en el momento que utilizo el diseñador de visual estudio Ejemplo. Boton derecho sobre el grid agregar columnas agrego la mia cuando por ejemplo en la propiedad longitud establezco 6 no almacena el valor lo deja como se inicializo no se si me explico bien un saludo y Muchas gracias