15/05/12 10:18
nibbio1971
Buongiorno,
ambiente visual studio 2008, VB.NET
sto "discutendo" con uno user control, che funziona perfettamente quando è inserito in una form come details, ma non funziona quando è inserito in una datagrid view. Lo user control ha due caselle di testo, una per il dato e una che calcola la lunghezza del dato.
Se trascino dalla mia datasource lo user control sulla form, tutto funziona
Se uso una datagrdview e imposto il tipo colonna a al mio user control
1) non vedo le due caselle di testo, bensì una sola
2) quando entro in modifica, non riporta il valore del dato
non capisco cosa sbaglio e sto cercando ormai da giorni.
Grazie
Lorenzo
Posto il codice del designer dello user control e il codice
ambiente visual studio 2008, VB.NET
sto "discutendo" con uno user control, che funziona perfettamente quando è inserito in una form come details, ma non funziona quando è inserito in una datagrid view. Lo user control ha due caselle di testo, una per il dato e una che calcola la lunghezza del dato.
Se trascino dalla mia datasource lo user control sulla form, tutto funziona
Se uso una datagrdview e imposto il tipo colonna a al mio user control
1) non vedo le due caselle di testo, bensì una sola
2) quando entro in modifica, non riporta il valore del dato
non capisco cosa sbaglio e sto cercando ormai da giorni.
Grazie
Lorenzo
Posto il codice del designer dello user control e il codice
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Partial Class myUserControlTest Inherits System.Windows.Forms.UserControl 'UserControl1 overrides dispose to clean up the component list. <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then components.Dispose() End If Finally MyBase.Dispose(disposing) End Try End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.ilMioDato = New System.Windows.Forms.TextBox Me.ilMioRisultato = New System.Windows.Forms.TextBox Me.SuspendLayout() ' 'ilMioDato ' Me.ilMioDato.Location = New System.Drawing.Point(0, 0) Me.ilMioDato.Name = "ilMioDato" Me.ilMioDato.Size = New System.Drawing.Size(185, 20) Me.ilMioDato.TabIndex = 0 ' 'ilMioRisultato ' Me.ilMioRisultato.Enabled = False Me.ilMioRisultato.Location = New System.Drawing.Point(191, 0) Me.ilMioRisultato.Name = "ilMioRisultato" Me.ilMioRisultato.Size = New System.Drawing.Size(189, 20) Me.ilMioRisultato.TabIndex = 1 ' 'myUserControlTest ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.Controls.Add(Me.ilMioRisultato) Me.Controls.Add(Me.ilMioDato) Me.Name = "myUserControlTest" Me.Size = New System.Drawing.Size(383, 22) Me.ResumeLayout(False) Me.PerformLayout() End Sub Friend WithEvents ilMioDato As System.Windows.Forms.TextBox Friend WithEvents ilMioRisultato As System.Windows.Forms.TextBox End Class
<System.ComponentModel.DefaultBindingProperty("Text")> _ Public Class myUserControlTest Public Overrides Property Text() As String Get Return Me.ilMioDato.Text End Get Set(ByVal value As String) Me.ilMioDato.Text = value End Set End Property Private Sub ilMioDato_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ilMioDato.TextChanged Me.ilMioRisultato.Text = Me.ilMioDato.Text.Length End Sub End Class Public Class NDC Inherits DataGridViewTextBoxCell Public Overrides ReadOnly Property EditType() As System.Type Get Return GetType(myUserControlTest_DGVColumnType) End Get End Property Public Overrides ReadOnly Property ValueType() As System.Type Get Return GetType(String) End Get End Property End Class Public Class myUserControlTest_WithCalendarDGVColumn Inherits DataGridViewColumn Public Sub New() MyBase.new(New NDC) End Sub ' ---> KKKKK Public Overrides Property CellTemplate() As DataGridViewCell Get Return MyBase.CellTemplate End Get Set(ByVal value As DataGridViewCell) ' Ensure that the cell used for the template is a NDC. If (value IsNot Nothing) AndAlso _ Not value.GetType().IsAssignableFrom(GetType(NDC)) _ Then Throw New InvalidCastException("Must be a NDC") End If MyBase.CellTemplate = value End Set End Property ' <--- KKKKK End Class Class myUserControlTest_DGVColumnType 'this is the new class to get your usercontrol into the datagridcolumn class 'here your have to change only the first line i.e inherits tbnumber to inherit 'your user control. Remianing all codes are for datagridview to track the keys 'and values. you need not change anything Inherits myUserControlTest ' (this usercontrol is for getting numeric input only) ' You can get this code for this class in my other thread ' here after you need not change any code Implements IDataGridViewEditingControl Private _dataGridView As DataGridView Private _rowIndex As Integer Private _valueChanged As Boolean Public Sub ApplyCellStyleToEditingControl(ByVal dataGridViewCellStyle As DataGridViewCellStyle) _ Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl Me.BackColor = dataGridViewCellStyle.BackColor Me.Font = dataGridViewCellStyle.Font Me.ForeColor = dataGridViewCellStyle.ForeColor End Sub Public Property EditingControlDataGridView() As DataGridView _ Implements IDataGridViewEditingControl.EditingControlDataGridView Get Return _dataGridView End Get Set(ByVal value As DataGridView) _dataGridView = value End Set End Property Public Property EditingControlFormattedValue() As Object _ Implements IDataGridViewEditingControl.EditingControlFormattedValue Get Return Text End Get Set(ByVal value As Object) Text = value.ToString() End Set End Property Public Property EditingControlRowIndex() As Integer _ Implements IDataGridViewEditingControl.EditingControlRowIndex Get Return _rowIndex End Get Set(ByVal value As Integer) _rowIndex = value End Set End Property Public Property EditingControlValueChanged() As Boolean _ Implements IDataGridViewEditingControl.EditingControlValueChanged Get Return _valueChanged End Get Set(ByVal value As Boolean) _valueChanged = value End Set End Property Public Function EditingControlWantsInputKey(ByVal keyData As Keys, ByVal dataGridViewWantsInputKey As Boolean) As Boolean _ Implements IDataGridViewEditingControl.EditingControlWantsInputKey Return True End Function Public ReadOnly Property EditingPanelCursor() As Cursor _ Implements IDataGridViewEditingControl.EditingPanelCursor Get Return MyBase.Cursor End Get End Property Public Function GetEditingControlFormattedValue(ByVal context As DataGridViewDataErrorContexts) As Object _ Implements IDataGridViewEditingControl.GetEditingControlFormattedValue Return Text End Function Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _ Implements IDataGridViewEditingControl.PrepareEditingControlForEdit End Sub Public ReadOnly Property RepositionEditingControlOnValueChange() As Boolean _ Implements IDataGridViewEditingControl.RepositionEditingControlOnValueChange Get Return False End Get End Property Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs) MyBase.OnTextChanged(e) _valueChanged = True _dataGridView.NotifyCurrentCellDirty(True) End Sub End Class
aaa