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