Moin, Moin!
Ich bekomme folgende Fehlermeldung beim Serialisieren eines ListViews:
'Eine Ausnahme (erste Chance) des Typs "System.Runtime.Serialization.SerializationException" ist in mscorlib.dll aufgetreten.'
Hintergrund: Ich versuche ein ListView mit allen Einstellungen zu serialisieren und später wieder einzulesen. Mein Listview ist vom originalen abgeleitet, unterstützt einige zusätzliche Eigenschaften und hat ein gewisses Verhalten beim Sortieren. Das soll natürlich wieder hergestellt werden.
Hier ein Codeauszug:
Public Function SaveToFile(ByVal sFileName As String) As Boolean
Dim fs As IO.FileStream = Nothing
Dim Result As Boolean
Try
fs = New IO.FileStream(sFileName, FileMode.OpenOrCreate)
'HeaderCollection speichern...
mColumnHeaderCol.SaveTo(fs)
'ListViewItemCollection speichern...
Dim arr(Me.Items.Count - 1) As eListViewItem
Me.Items.CopyTo(arr, 0)
Dim Formatter As New _
Runtime.Serialization.Formatters.Binary.BinaryFormatter
Try
With Formatter
.Serialize(fs, arr)
.Serialize(fs, mEditControlType)
.Serialize(fs, mStopInputMoveAtEnd)
.Serialize(fs, mTrimInput)
.Serialize(fs, mChangeItemCol)
.Serialize(fs, Me.Sorting)
.Serialize(fs, ColorSorter)
If Me.ListViewItemSorter Is Nothing Then
Dim T As Boolean = False
.Serialize(fs, T)
Else
Dim T As Boolean = True
.Serialize(fs, T)
'HIER TRITT DER FEHLER AUF!! ################
.Serialize(fs, Me.ListViewItemSorter)
End If
End With
Catch ex As Exception
Throw ex
End Try
Result = True
Catch ex As Exception
Result = False
Finally
If Not IsNothing(fs) Then fs.Close()
End Try
Return Result
End Function
<Serializable()> _
Private Class LvSorter(Of T As IComparable)
Implements IComparer
Private column As Integer
Private tc As System.ComponentModel.TypeConverter
Private mSortOrder As SortOrder
Public Sub New(ByVal column As Integer)
Me.column = column
tc = System.ComponentModel.TypeDescriptor.GetConverter(GetType(T))
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As _
Integer Implements System.Collections.IComparer.Compare
Try
Dim lvi1 As ListViewItem = CType(x, ListViewItem)
Dim lvi2 As ListViewItem = CType(y, ListViewItem)
Dim arg1 As T = CType(tc.ConvertFromString(lvi1.SubItems( _
column).Text), T)
Dim arg2 As T = CType(tc.ConvertFromString(lvi2.SubItems( _
column).Text), T)
If lvi1.ListView.Sorting = SortOrder.Ascending Then
Return arg1.CompareTo(arg2)
Else
Return -arg1.CompareTo(arg2)
End If
Catch ex As Exception
Return 0
End Try
End Function
End Class Ich komme da irgendwie nicht weiter.
Wäre dankbar für einen Tipp.
Schü |