Posted 25 June 2023, 5:20 pm EST
Hi,
I have a situation where a user may apply row filtering to the grid. Programmatically, I want to be able to save any currently applied row filtering, clear the row filter, refresh the data, and then re-apply the preserved row filter.
I am saving away the current row filter information like this:
Dim myMemoryStream As New MemoryStream
Dim myXmlTextWriter As New System.Xml.XmlTextWriter(myMemoryStream, System.Text.Encoding.UTF8)
myXmlTextWriter.Formatting = Formatting.Indented
myXmlTextWriter.Indentation = 2
myXmlTextWriter.WriteStartDocument()
myXmlTextWriter.WriteStartElement("AppliedFilter")
activeSheet.RowFilter.Serialize(myXmlTextWriter)
myXmlTextWriter.WriteEndElement()
myXmlTextWriter.WriteEndDocument()
myXmlTextWriter.Flush()
If myMemoryStream.Position > 0 Then
myMemoryStream.Position = 0
End If
filterXmlDocument = New XmlDocument()
filterXmlDocument.Load(myMemoryStream)
myXmlTextWriter.Close()
I am clearing the row filter like this:
activeSheet.ClearRowFilter()
I then set activeSheet.Rows.Count to 0, and repopulate the grid with saved data.
Now I need to re-apply the saved RowFilter information. I am trying this:
If filterXmlDocument IsNot Nothing Then
Dim node As System.Xml.XmlNode
node = filterXmlDocument.FirstChild
While Not node.Name.Equals("AppliedFilter")
node = node.NextSibling
End While
Dim myXMLNodeReader As New System.Xml.XmlNodeReader(node)
myXMLNodeReader.Read()
activeSheet.RowFilter.Deserialize(myXMLNodeReader)
End If
…but get an error of “System.NullReferenceException: ‘Object reference not set to an instance of an object.’ FarPoint.Win.Spread.SheetView.RowFilter.get returned Nothing.” at the “activeSheet.RowFilter.Deserialize(myXMLNodeReader)” line.
Please advise. Should I even be using the Serialize() and Deserialize() methods for preserving and re-applying a row filter?