To reproduce: Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.RadGridView1.AutoGenerateColumns = False Dim column = New GridViewTextBoxColumn column.Name = "Name" column.FieldName = "ChildItem" column.DataType = GetType(CustomItem) column.DataTypeConverter = New CustomItemTypeConverter() Me.RadGridView1.Columns.Add(column) Me.RadGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill Dim objects = { New CustomContainer With {.ChildItem = New CustomItem With {.Name = "A"}}, New CustomContainer With {.ChildItem = New CustomItem With {.Name = "B"}}, New CustomContainer With {.ChildItem = New CustomItem With {.Name = "C"}} } Me.RadGridView1.DataSource = objects End Sub Private Sub RadGridView_EditorRequired(sender As Object, e As EditorRequiredEventArgs) Handles RadGridView1.EditorRequired e.EditorType = GetType(GridSpinEditor) End Sub Class CustomContainer Public Property ChildItem As CustomItem End Class Class CustomItem Public Property Name As String End Class Class CustomItemTypeConverter Inherits TypeConverter Public Overrides Function CanConvertFrom(context As ITypeDescriptorContext, sourceType As Type) As Boolean If sourceType = GetType(Decimal) Then Return True End If Return MyBase.CanConvertFrom(context, sourceType) End Function Public Overrides Function CanConvertTo(context As ITypeDescriptorContext, destinationType As Type) As Boolean If destinationType = GetType(Decimal) OrElse destinationType = GetType(String) OrElse destinationType = GetType(CustomItem) Then Return True End If Return MyBase.CanConvertTo(context, destinationType) End Function Public Overrides Function ConvertTo(context As ITypeDescriptorContext, culture As System.Globalization.CultureInfo, _ value As Object, destinationType As Type) As Object If TypeOf value Is CustomItem Then Dim customValue = DirectCast(value, CustomItem) If destinationType = GetType(Decimal) Then Return Microsoft.VisualBasic.AscW(customValue.Name.Chars(0)) ElseIf destinationType = GetType(String) Then Return customValue.Name ElseIf destinationType = GetType(CustomItem) Then Return customValue Else Return MyBase.ConvertTo(context, culture, value, destinationType) End If End If Return MyBase.ConvertTo(context, culture, value, destinationType) End Function Public Overrides Function ConvertFrom(context As ITypeDescriptorContext, culture As System.Globalization.CultureInfo, value As Object) As Object If TypeOf value Is Decimal Then Dim decValue = DirectCast(value, Decimal) Dim intValue = CInt(decValue) Dim charValue = Microsoft.VisualBasic.ChrW(intValue) Return New CustomItem With {.Name = New String(charValue, 1)} End If Return MyBase.ConvertFrom(context, culture, value) End Function End Class Workaround: Public Class MyEditor Inherits GridSpinEditor Public Overrides ReadOnly Property IsModified() As Boolean Get If Me.originalValue Is Nothing Then Return (Me.Value IsNot Nothing AndAlso Me.Value <> DBNull.Value) End If If Me.Value Is Nothing Then Return (Me.originalValue IsNot Nothing AndAlso Me.originalValue <> DBNull.Value) End If Dim column As GridViewDataColumn = (DirectCast(Me.OwnerElement, GridDataCellElement)).ColumnInfo If column.DataTypeConverter IsNot Nothing AndAlso column.DataTypeConverter.CanConvertTo(Me.OwnerElement, GetType(Decimal)) Then Return Not column.DataTypeConverter.ConvertTo(Me.OwnerElement, column.FormatInfo, Me.originalValue, GetType(Decimal)).Equals(Convert.ToDecimal(Me.Value)) End If Return Not Convert.ToDecimal(Me.originalValue).Equals(Convert.ToDecimal(Me.Value)) End Get End Property End Class Private Sub RadGridView_EditorRequired(sender As Object, e As EditorRequiredEventArgs) Handles RadGridView1.EditorRequired e.EditorType = GetType(MyEditor) End Sub