PDA

View Full Version : آموزش: نحوه ذخیره نموده و بازیابی اطلاعات درون TreeVeiw در وی بی دات نت



abbasmohr
پنج شنبه 04 اردیبهشت 1399, 16:52 عصر
سلام دوستان
اگه کسی می تونه این مشکل من رو حل کنه ممنون میشم.
مشکل من اینه : نحوه ذخیره نموده و بازیابی اطلاعات درون TreeVeiw به و از درون فایل txt یا فایل xml .

abbasmohr
یک شنبه 14 اردیبهشت 1399, 17:42 عصر
ابتدا :
<Serializable()> _
Public Class clsTreeFile
Public oTreeNode As TreeNode

End Class

برای ذخیره :
Dim dlg As New SaveFileDialog

dlg.DefaultExt = "txt"
dlg.Filter = "Text files|*.txt"
dlg.OverwritePrompt = True

If dlg.ShowDialog = Windows.Forms.DialogResult.OK Then
' Save the treeview nodes to file

Dim oTreeList As New List(Of clsTreeFile)

For Each oNode As TreeNode In t1.Nodes
Dim oTree As New clsTreeFile

oTree.oTreeNode = oNode
oTreeList.Add(oTree)
Next

Using oFileStream As IO.FileStream = IO.File.Open(dlg.FileName, IO.FileMode.Create)
Dim oBinaryFormatter As New Runtime.Serialization.Formatters.Binary.BinaryForm atter
oBinaryFormatter.Serialize(oFileStream, oTreeList)
End Using

MessageBox.Show("ذخیره با موفقیت انجام شد", "ذخیره", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If


برای بازیابی :

Dim dlg As New OpenFileDialog


dlg.DefaultExt = "txt"
dlg.Filter = "Text files|*.txt"

If dlg.ShowDialog = Windows.Forms.DialogResult.OK Then
' Open saved file and read the binary data back to the treeview

t1.Nodes.Clear()

Dim oTreeList As New List(Of clsTreeFile)

Using oFileStream As IO.FileStream = IO.File.Open(dlg.FileName, IO.FileMode.Open)
Dim oBinaryFormatter As New Runtime.Serialization.Formatters.Binary.BinaryForm atter
oTreeList = CType(oBinaryFormatter.Deserialize(oFileStream), List(Of clsTreeFile))
End Using

For Each oNode As clsTreeFile In oTreeList
t1.Nodes.Add(oNode.oTreeNode)
Next

t1.ExpandAll()
End If

Hossis
پنج شنبه 30 مرداد 1399, 15:23 عصر
باز خوانی xml در TV و بالعکس

Public Class TreeViewSerializer

' Xml tag for node, e.g. 'node' in case of <node></node>
Private Const XmlNodeTag As String = "node"

' Xml attributes for node e.g. <node text="Asia" tag="" imageindex="1"></node>
Private Const XmlNodeTextAtt As String = "text"
Private Const XmlNodeTagAtt As String = "tag"
Private Const XmlNodeImageIndexAtt As String = "imageindex"

'
' TODO: Add constructor logic here
'
Public Sub New()
End Sub

'System.IO.StringWriter s;
Public Sub SerializeTreeView(treeView As TreeView, fileName As String)
Dim textWriter As New XmlTextWriter(fileName, System.Text.Encoding.ASCII)
' writing the xml declaration tag
textWriter.WriteStartDocument()
'textWriter.WriteRaw("\r\n");
' writing the main tag that encloses all node tags
textWriter.WriteStartElement("TreeView")

' save the nodes, recursive method
SaveNodes(treeView.Nodes, textWriter)

textWriter.WriteEndElement()

textWriter.Close()
End Sub

Private Sub SaveNodes(nodesCollection As TreeNodeCollection, textWriter As XmlTextWriter)
For i As Integer = 0 To nodesCollection.Count - 1
Dim node As TreeNode = nodesCollection(i)
textWriter.WriteStartElement(XmlNodeTag)
textWriter.WriteAttributeString(XmlNodeTextAtt, node.Text)
textWriter.WriteAttributeString(XmlNodeImageIndexA tt, node.ImageIndex.ToString())
If node.Tag IsNot Nothing Then
textWriter.WriteAttributeString(XmlNodeTagAtt, node.Tag.ToString())
End If

' add other node properties to serialize here

If node.Nodes.Count > 0 Then


SaveNodes(node.Nodes, textWriter)
End If
textWriter.WriteEndElement()
Next
End Sub

Public Sub DeserializeTreeView(treeView As TreeView, fileName As String)
Dim reader As XmlTextReader = Nothing
Try
' disabling re-drawing of treeview till all nodes are added
treeView.BeginUpdate()
reader = New XmlTextReader(fileName)

Dim parentNode As TreeNode = Nothing

While reader.Read()
If reader.NodeType = XmlNodeType.Element Then
If reader.Name = XmlNodeTag Then
Dim newNode As New TreeNode()
Dim isEmptyElement As Boolean = reader.IsEmptyElement

' loading node attributes
Dim attributeCount As Integer = reader.AttributeCount
If attributeCount > 0 Then
For i As Integer = 0 To attributeCount - 1
reader.MoveToAttribute(i)

SetAttributeValue(newNode, reader.Name, reader.Value)
Next
End If

' add new node to Parent Node or TreeView
If parentNode IsNot Nothing Then
parentNode.Nodes.Add(newNode)
Else
treeView.Nodes.Add(newNode)
End If

' making current node 'ParentNode' if its not empty
If Not isEmptyElement Then
parentNode = newNode

End If
End If
' moving up to in TreeView if end tag is encountered
ElseIf reader.NodeType = XmlNodeType.EndElement Then
If reader.Name = XmlNodeTag Then
parentNode = parentNode.Parent
End If
'Ignore Xml Declaration
ElseIf reader.NodeType = XmlNodeType.XmlDeclaration Then
ElseIf reader.NodeType = XmlNodeType.None Then
Return
ElseIf reader.NodeType = XmlNodeType.Text Then
parentNode.Nodes.Add(reader.Value)

End If
End While
Finally
' enabling redrawing of treeview after all nodes are added
treeView.EndUpdate()
reader.Close()
End Try
End Sub

''' <summary>
''' Used by Deserialize method for setting properties of TreeNode from xml node attributes
''' </summary>
''' <param name="node"></param>
''' <param name="propertyName"></param>
''' <param name="value"></param>
Private Sub SetAttributeValue(node As TreeNode, propertyName As String, value As String)
If propertyName = XmlNodeTextAtt Then
node.Text = value
ElseIf propertyName = XmlNodeImageIndexAtt Then
node.ImageIndex = Integer.Parse(value)
ElseIf propertyName = XmlNodeTagAtt Then
node.Tag = value
End If
End Sub

Public Sub LoadXmlFileInTreeView(treeView As TreeView, fileName As String)
Dim reader As XmlTextReader = Nothing
Try
treeView.BeginUpdate()
reader = New XmlTextReader(fileName)

Dim n As New TreeNode(fileName)
treeView.Nodes.Add(n)
While reader.Read()
If reader.NodeType = XmlNodeType.Element Then
Dim isEmptyElement As Boolean = reader.IsEmptyElement
Dim text As New StringBuilder()
text.Append(reader.Name)
Dim attributeCount As Integer = reader.AttributeCount
If attributeCount > 0 Then
text.Append(" ( ")
For i As Integer = 0 To attributeCount - 1
If i <> 0 Then
text.Append(", ")
End If
reader.MoveToAttribute(i)
text.Append(reader.Name)
text.Append(" = ")
text.Append(reader.Value)
Next
text.Append(" ) ")
End If

If isEmptyElement Then
n.Nodes.Add(text.ToString())
Else
n = n.Nodes.Add(text.ToString())
End If
ElseIf reader.NodeType = XmlNodeType.EndElement Then
n = n.Parent

ElseIf reader.NodeType = XmlNodeType.XmlDeclaration Then
ElseIf reader.NodeType = XmlNodeType.None Then
Return
ElseIf reader.NodeType = XmlNodeType.Text Then
n.Nodes.Add(reader.Value)

End If
End While
Finally
treeView.EndUpdate()
reader.Close()
End Try
End Sub
End Class