Dovendo realizzare una DataGridViewColumn di tipo MaskedTextBox e NumericUpDown ho fatto un salto su Msdn dove ho trovato questo esempio per colonne MaskedTextBox:
DataGridView Custom Column Sample
http://msdn2.microsoft.com/en-us/library/ms180996.aspx
tutto bene ma quando da IDE di tenta di impostare le proprietà custom il valore non viene memorizzato.
Dopo aver letto questo thread su Microsoft Connect:
DataGridView Column Editor code generation issue
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=108961
stavo quasi per considerarlo un bug, ma ne ero veramente poco convinto, infatti sulle colonne native del framework non ci sono problemi.
Poi ho provato questo esempio:
Sviluppo di una cella e colonna NumericUpDown personalizzate per il controllo DataGridView
http://www.microsoft.com/italy/msdn/library/framework/winf_numericupdown.mspx
e qui il problema non si presentava e dopo aver confrontato il codice e fatto vari tentativi ho capito che la soluzione stava nell'implementare il metodo Clone nella DataGridViewTextBoxCell custom.
Public Overrides Function Clone() As Object
Dim dataGridViewCell As MyDataGridViewNumericUpDownCell = CType(MyBase.Clone, MyDataGridViewNumericUpDownCell)
If (Not (dataGridViewCell) Is Nothing) Then
dataGridViewCell.DecimalPlaces = Me.decimalPlacesValue
dataGridViewCell.Increment = Me.incrementValue
dataGridViewCell.Maximum = Me.maximumValue
dataGridViewCell.Minimum = Me.minimumValue
dataGridViewCell.ThousandsSeparator = Me.thousandsSeparatorValue
End If
Return dataGridViewCell
End Function
Senza questo metodo le proprietà della colonna DecimalPlaces, Increment, Maximum, Minimum, ThousandsSeparator non vengono memorizzare se modificate da IDE.
Secondo me vedendo vari esempi in rete di implementazione di colonne custom si fatto un passo avanti rispetto al DataGrid, ma non è ancora una passeggiata realizzare delle buone column custom, insomma guardando l'implementazione del secondo link si vede che il codice da scrivere è una vagonata e in alcuni casi si fa uso di API.
Morale c'è sempre la sensazione di avere fatto una column che si può dare per buona solo sulla base dei test effettuati e se la si deve modificare si spera di non introdurre nuovi bug.
Credo che oltre agli esempi servirebbero linee guida a cui attenersi rigorosamente per la creazione di Column custom (cosa implementare e sopratutto perchè).