I can not get the xmlserializer to work in the gridSettingsPersister.vb class. Once I move everything to use xmlserializer it blows up saying that the there is an error creating the xml document. The innerexception says.{"The type System.Collections.ArrayList may not be used in this context."}. Can anyone assist me on this one. below is my code for the persister.
There error occurs here:"There was an error generating the XML document."
Public Overloads Overrides Function ToString() As String
Dim formatter As New XmlSerializer(Me.GetType())
Dim writer As New StringWriter()
formatter.Serialize(writer, Me) - ******** This is the error line
Return writer.ToString()
End Function
Any help will be appreciated.
Thank You,
Brian
There error occurs here:"There was an error generating the XML document."
Public Overloads Overrides Function ToString() As String
Dim formatter As New XmlSerializer(Me.GetType())
Dim writer As New StringWriter()
formatter.Serialize(writer, Me) - ******** This is the error line
Return writer.ToString()
End Function
Imports System
Imports System.Collections.Generic
Imports System.Web
Imports Telerik.Web.UI
Imports System.Web.UI.WebControls
Imports System.Collections
Imports System.Web.UI
Imports System.IO
Imports System.Xml.Serialization
''' <
summary
>
''' Imports and exports settings from a RadGrid instance.
''' </
summary
>
Public Class GridSettingsPersister
''' <
summary
>
''' Initializes an instance of GridSettingsPersister from a RadGrid instance
''' </
summary
>
''' <
param
name
=
"grid"
>The RadGrid instance to import and exports settings</
param
>
Public Sub New(ByVal grid As RadGrid)
Me.New(grid, GridSettingsType.All)
End Sub
''' <
summary
>
''' Initializes an instance of GridSettingsPersister from a RadGrid instance
''' and a collection GridSettingsType values
''' </
summary
>
''' <
param
name
=
"grid"
>The RadGrid instance to import and exports settings</
param
>
''' <
param
name
=
"persistedSettingFlags"
>
''' A collection of GridSettingType values specifying the type of grid settings
''' to import or export
''' </
param
>
Public Sub New(ByVal grid As RadGrid, ByVal persistedSettingFlags As GridSettingsType)
_grid = grid
_persistedSettingTypes = persistedSettingFlags
_settings = New GridSettingsCollection()
_settings.ColumnSettings = New List(Of ColumnSettings)()
_settings.AutoGeneratedColumnSettings = New List(Of ColumnSettings)()
End Sub
Private _grid As RadGrid
Private _persistedSettingTypes As GridSettingsType
Private _settings As GridSettingsCollection
''' <
summary
>
''' The underlyiong RadGrid instance to import or export settings from
''' </
summary
>
Public ReadOnly Property Grid() As RadGrid
Get
Return _grid
End Get
End Property
''' <
summary
>
''' Gets or sets the GridSettingType flags that specify the grid settings to
''' export or import
''' </
summary
>
Public Overridable Property PersistedSettingTypes() As GridSettingsType
Get
Return _persistedSettingTypes
End Get
Set(ByVal value As GridSettingsType)
_persistedSettingTypes = value
End Set
End Property
Protected Overridable Property Settings() As GridSettingsCollection
Get
Return _settings
End Get
Set(ByVal value As GridSettingsCollection)
_settings = value
End Set
End Property
''' <
summary
>
''' Saves the current grid settings and returns the settings serilized to string
''' </
summary
>
Public Overridable Function SaveSettings() As String
Return GetSavedSettings().ToString()
'save item to DB then return the data
End Function
''' <
summary
>
''' Saves the current grid settings and retrieves the underlying
''' GridSettingsCollection instance that contains the grid settings
''' </
summary
>
Public Overridable Function GetSavedSettings() As GridSettingsCollection
If Grid Is Nothing Then
Throw New NullReferenceException()
End If
If IsSettingSpecified(GridSettingsType.Paging) Then
SavePagingSettings()
End If
If IsSettingSpecified(GridSettingsType.Grouping) Then
SaveGroupByExpressions()
End If
If IsSettingSpecified(GridSettingsType.Sorting) Then
SaveSortExpressions()
End If
If IsSettingSpecified(GridSettingsType.Filtering) Then
SaveFilterExpression()
End If
If IsSettingSpecified(GridSettingsType.ColumnSettings) Then
SaveColumnSettings()
End If
Return Settings
End Function
Protected Function IsSettingSpecified(ByVal settingType As GridSettingsType) As Boolean
Return (PersistedSettingTypes And GridSettingsType.All) = GridSettingsType.All OrElse (PersistedSettingTypes And settingType) = settingType
End Function
Protected Overridable Sub SavePagingSettings()
Settings.PageSize = Grid.MasterTableView.PageSize
End Sub
Protected Overridable Sub SaveGroupByExpressions()
Settings.GroupByExpressionsStates = New Object(Grid.MasterTableView.GroupByExpressions.Count - 1) {}
Dim i As Integer = 0
While i <
Settings.GroupByExpressionsStates.Length
Settings.GroupByExpressionsStates(i) = (DirectCast(Grid.MasterTableView.GroupByExpressions(i), IStateManager)).SaveViewState()
System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
End While
End Sub
Protected Overridable Sub SaveSortExpressions()
Settings.SortExpressionsState = (DirectCast(Grid.MasterTableView.SortExpressions, IStateManager)).SaveViewState()
End Sub
Protected Overridable Sub SaveFilterExpression()
Settings.FilterExpression
=
Grid
.MasterTableView.FilterExpression
End Sub
Protected Overridable Sub SaveColumnSettings()
Settings.ColumnSettings.Clear()
For Each column As GridColumn In Grid.MasterTableView.Columns
Settings.ColumnSettings.Add(GetColumnSettings(column))
Next
Settings.AutoGeneratedColumnSettings.Clear()
For Each column As GridColumn In Grid.MasterTableView.AutoGeneratedColumns
Settings.AutoGeneratedColumnSettings.Add(GetColumnSettings(column))
Next
End Sub
Private Function GetColumnSettings(ByVal column As GridColumn) As ColumnSettings
Dim colSettings As New ColumnSettings()
colSettings.UniqueName
=
column
.UniqueName
colSettings.Width
=
column
.HeaderStyle.Width
colSettings.Visible
=
column
.Visible
colSettings.Display
=
column
.Display
colSettings.OrderIndex
=
column
.OrderIndex
colSettings.CurrentFilterFunction
=
column
.CurrentFilterFunction
colSettings.CurrentFilterValue
=
column
.CurrentFilterValue
Return colSettings
End Function
Private Sub SetColumnSettings(ByRef column As GridColumn, ByVal setting As ColumnSettings)
column.Display
=
setting
.Display
column.Visible
=
setting
.Visible
column.HeaderStyle.Width
=
setting
.Width
column.OrderIndex
=
setting
.OrderIndex
column.CurrentFilterFunction
=
setting
.CurrentFilterFunction
column.CurrentFilterValue
=
setting
.CurrentFilterValue
End Sub
''' <summary>
''' Loads grids settings from a serialized string
''' </
summary
>
''' <
param
name
=
"value"
>The string that contains the serialized settings</
param
>
Public Overridable Sub LoadSettings(ByVal value As String)
'retrieve from database the serialized string of data and call load settings
LoadSettings(GridSettingsCollection.LoadFromSerializedData(value))
End Sub
''' <
summary
>
''' Loads grids settings from a byte array
''' </
summary
>
''' <
param
name
=
"data"
>The byte array that contains the serialized grid settings</
param
>
Public Overridable Sub LoadSettings(ByVal data As Byte())
LoadSettings(GridSettingsCollection.LoadFromSerializedData(data))
End Sub
''' <
summary
>
''' Loads grid settings from a GridSettingsCollection instance
''' </
summary
>
''' <
param
name
=
"savedSettings"
>The GridSettingsCollection instance to load settings from</
param
>
Public Overridable Sub LoadSettings(ByVal savedSettings As GridSettingsCollection)
If Grid Is Nothing OrElse savedSettings Is Nothing Then
Throw New NullReferenceException()
End If
Settings = savedSettings
If IsSettingSpecified(GridSettingsType.Paging) Then
LoadPagingSettings()
End If
If IsSettingSpecified(GridSettingsType.Grouping) Then
LoadGroupByExpressions()
End If
If IsSettingSpecified(GridSettingsType.Sorting) Then
LoadSortExpressions()
End If
If IsSettingSpecified(GridSettingsType.Filtering) Then
LoadFilterExpression()
End If
If IsSettingSpecified(GridSettingsType.ColumnSettings) Then
LoadColumnSettings()
End If
End Sub
Protected Overridable Sub LoadPagingSettings()
If Grid.MasterTableView.AllowPaging AndAlso Settings.PageSize > 0 Then
Grid.MasterTableView.PageSize = Settings.PageSize
End If
End Sub
Protected Overridable Sub LoadGroupByExpressions()
If Settings.GroupByExpressionsStates Is Nothing Then
Return
End If
Grid.MasterTableView.GroupByExpressions.Clear()
For Each expressionState As Object In Settings.GroupByExpressionsStates
Dim expression As New GridGroupByExpression()
DirectCast(expression, IStateManager).LoadViewState(expressionState)
Grid.MasterTableView.GroupByExpressions.Add(expression)
Next
End Sub
Protected Overridable Sub LoadSortExpressions()
If Settings.SortExpressionsState Is Nothing Then
Return
End If
DirectCast(Grid.MasterTableView.SortExpressions, IStateManager).LoadViewState(Settings.SortExpressionsState)
End Sub
Protected Overridable Sub LoadFilterExpression()
Grid.MasterTableView.FilterExpression = Settings.FilterExpression
End Sub
Protected Overridable Sub LoadColumnSettings()
If Settings.AutoGeneratedColumnSettings.Count > 0 Then
AddHandler Grid.ColumnCreated, New GridColumnCreatedEventHandler(AddressOf Grid_ColumnCreated)
End If
For Each colSetting As ColumnSettings In Settings.ColumnSettings
Dim column As GridColumn = Grid.MasterTableView.GetColumnSafe(colSetting.UniqueName)
If column IsNot Nothing Then
SetColumnSettings(column, colSetting)
End If
Next
End Sub
Private Sub Grid_ColumnCreated(ByVal sender As Object, ByVal e As GridColumnCreatedEventArgs)
Dim colSettings As ColumnSettings = Nothing
For Each colSettings In Settings.AutoGeneratedColumnSettings
If colSettings.UniqueName = e.Column.UniqueName Then
colSettings = colSettings
Exit For
End If
Next colSettings
Dim column As GridColumn = e.Column
If colSettings IsNot Nothing Then
SetColumnSettings(column, colSettings)
End If
End Sub
End Class
''' <
summary
>
''' Enumerates the types of grid settings that can be persisted
''' </
summary
>
<
Flags
()> _
Public Enum GridSettingsType
Paging = 1
Sorting = 2
Filtering = 4
Grouping = 8
ColumnSettings = 16
All = 32
End Enum
''' <
summary
>
''' Represents a collection of grid settings
''' </
summary
>
<
Serializable
()> _
Public Class GridSettingsCollection
Private _pageSize As Integer
Private _groupByExpressionsStates As Object
Private _sortExpressionsState As Object
Private _filterExpression As String
Private _columnSettings As List(Of ColumnSettings)
Private _autoColumnSettings As List(Of ColumnSettings)
Public Property PageSize() As Integer
Get
Return _pageSize
End Get
Set(ByVal value As Integer)
_pageSize = value
End Set
End Property
Public Property GroupByExpressionsStates() As Object()
Get
Return _groupByExpressionsStates
End Get
Set(ByVal value As Object())
_groupByExpressionsStates = value
End Set
End Property
Public Property SortExpressionsState() As Object
Get
Return _sortExpressionsState
End Get
Set(ByVal value As Object)
_sortExpressionsState = value
End Set
End Property
Public Property FilterExpression() As String
Get
Return _filterExpression
End Get
Set(ByVal value As String)
_filterExpression = value
End Set
End Property
Public Property ColumnSettings() As List(Of ColumnSettings)
Get
Return _columnSettings
End Get
Set(ByVal value As List(Of ColumnSettings))
_columnSettings = value
End Set
End Property
Public Property AutoGeneratedColumnSettings() As List(Of ColumnSettings)
Get
Return _autoColumnSettings
End Get
Set(ByVal value As List(Of ColumnSettings))
_autoColumnSettings = value
End Set
End Property
''' <
summary
>
''' Returns the serialized object as string
''' </
summary
>
Public Overloads Overrides Function ToString() As String
Dim formatter As New XmlSerializer(Me.GetType())
Dim writer As New StringWriter()
formatter.Serialize(writer, Me)
Return writer.ToString()
End Function
''' <
summary
>
''' Returns the serialized object as byte array
''' </
summary
>
Public Function ToArray() As Byte()
Dim formatter As New XmlSerializer(Me.GetType())
Using stream As New MemoryStream()
formatter.Serialize(stream, Me)
Return stream.ToArray()
End Using
End Function
''' <
summary
>
''' Gets the GridSettingsCollectionInstance from its serialized string data
''' </
summary
>
''' <
param
name
=
"data"
>The object as serialized string data</
param
>
Public Shared Function LoadFromSerializedData(ByVal data As String) As GridSettingsCollection
Dim formatter As New LosFormatter()
Return DirectCast(formatter.Deserialize(data), GridSettingsCollection)
End Function
''' <
summary
>
''' Gets the GridSettingsCollectionInstance from its serialized byte array
''' </
summary
>
''' <
param
name
=
"data"
>The object as serialized byte array</
param
>
Public Shared Function LoadFromSerializedData(ByVal data As Byte()) As GridSettingsCollection
Dim formatter As New XmlSerializer(GetType(GridSettingsCollection))
Using stream As New MemoryStream(data)
Return DirectCast(formatter.Deserialize(stream), GridSettingsCollection)
End Using
End Function
End Class
''' <
summary
>
''' Represents a collection of grid column settings
''' </
summary
>
<
Serializable
()> _
Public Class ColumnSettings
Private _uniqueName As String
Private _orderIndex As Integer
Private _width As Unit
Private _visible As Boolean
Private _display As Boolean
Private _currentFilterFunction As GridKnownFunction
Private _currentFilterValue As String
Public Property UniqueName() As String
Get
Return _uniqueName
End Get
Set(ByVal value As String)
_uniqueName = value
End Set
End Property
Public Property OrderIndex() As Integer
Get
Return _orderIndex
End Get
Set(ByVal value As Integer)
_orderIndex = value
End Set
End Property
Public Property Width() As Unit
Get
Return _width
End Get
Set(ByVal value As Unit)
_width = value
End Set
End Property
Public Property Visible() As Boolean
Get
Return _visible
End Get
Set(ByVal value As Boolean)
_visible = value
End Set
End Property
Public Property Display() As Boolean
Get
Return _display
End Get
Set(ByVal value As Boolean)
_display = value
End Set
End Property
Public Property CurrentFilterFunction() As GridKnownFunction
Get
Return _currentFilterFunction
End Get
Set(ByVal value As GridKnownFunction)
_currentFilterFunction = value
End Set
End Property
Public Property CurrentFilterValue() As String
Get
Return _currentFilterValue
End Get
Set(ByVal value As String)
_currentFilterValue = value
End Set
End Property
End Class
Any help will be appreciated.
Thank You,
Brian