-
Sep 30th, 2016, 06:42 PM
#1
Thread Starter
Lively Member
vb.net read xml to listview and textbox
Hi
How can I read this xml to TreeView
this is the TreeView
<Text>Category 1</Text>
<Text>Name 1</Text>
and this when I select <Text>Name 1</Text> the I get the rest into Textbox
<Layer>Layer name</Layer>
<Layer>Line name</Layer>
<Block>Block name</Block>
<Color>Color name</Color>
Code:
<?xml version="1.0" encoding="utf-8"?>
<TreeViewData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Nodes>
<TreeNodeData>
<Text>Category 1</Text>
<ImageIndex>0</ImageIndex>
<SelectedImageIndex>1</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
<Nodes>
<TreeNodeData>
<Text>Name 1</Text>
<Layer>Layer name</Layer>
<Layer>Line name</Layer>
<Block>Block name</Block>
<Color>Color name</Color>
<ImageIndex>1</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>true</Checked>
<Expanded>false</Expanded>
</TreeNodeData>
</Nodes>
</TreeNodeData>
<TreeNodeData>
<Text>Category 2</Text>
<ImageIndex>0</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
<Nodes>
<TreeNodeData>
<Text>Name 1</Text>
<Layer>Layer name</Layer>
<Layer>Line name</Layer>
<Block>Block name</Block>
<Color>Color name</Color>
<ImageIndex>1</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
</TreeNodeData>
</Nodes>
</TreeNodeData>
</Nodes>
</TreeViewData>
-
Oct 1st, 2016, 12:02 PM
#2
Re: vb.net read xml to listview and textbox
The title says ListView and your post says TreeView. So which is correct?
-
Oct 1st, 2016, 01:35 PM
#3
Thread Starter
Lively Member
Re: vb.net read xml to listview and textbox
Sorry for the Title This is Treeview I am tray to use
-
Oct 2nd, 2016, 07:09 AM
#4
Re: vb.net read xml to listview and textbox
Here is an example based on the data provided. I did add one additional name node to the first category. This is very specific to the example given. If further depth of nesting was needed a different approach would have been taken.
Code:
Imports <xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Imports <xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'build aTreeView
aTreeView.Nodes.Clear()
aTreeView.Nodes.Add("Root")
Dim ie As IEnumerable(Of XElement)
ie = From el In xe.<Nodes>.<TreeNodeData> Select el.<Text>.FirstOrDefault
'get category nodes
For Each el As XElement In ie
Dim tn As New TreeNode(el.Value)
'get name nodes
For Each sel As XElement In el.Parent...<TreeNodeData>
Dim stn As New TreeNode(sel.<Text>.Value)
stn.Tag = sel 'will be used in treeview select
tn.Nodes.Add(stn)
Next
aTreeView.Nodes(0).Nodes.Add(tn)
Next
End Sub
Private Sub aTreeView_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles aTreeView.AfterSelect
TextBox1.Clear()
If e.Node.Tag IsNot Nothing Then
Dim foo As XElement = DirectCast(e.Node.Tag, XElement)
For Each el As XElement In foo.Elements
TextBox1.AppendText(el.Value)
TextBox1.AppendText(" ")
Next
End If
End Sub
'to load from a file
' Dim xe As XElement = XElement.Load("Your Path Here")
' for testing
Dim xe As XElement = <TreeViewData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Nodes>
<TreeNodeData>
<Text>Category 1</Text>
<ImageIndex>0</ImageIndex>
<SelectedImageIndex>1</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
<Nodes>
<TreeNodeData>
<Text>Name 1</Text>
<Layer>Layer name</Layer>
<Layer>Line name</Layer>
<Block>Block name</Block>
<Color>Color name</Color>
<ImageIndex>1</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>true</Checked>
<Expanded>false</Expanded>
</TreeNodeData>
<TreeNodeData>
<Text>Name 2</Text>
<Layer>Layer name2</Layer>
<Layer>Line name2</Layer>
<Block>Block name2</Block>
<Color>Color name2</Color>
<ImageIndex>1</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>true</Checked>
<Expanded>false</Expanded>
</TreeNodeData>
</Nodes>
</TreeNodeData>
<TreeNodeData>
<Text>Category 2</Text>
<ImageIndex>0</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
<Nodes>
<TreeNodeData>
<Text>Name 1</Text>
<Layer>Layer name</Layer>
<Layer>Line name</Layer>
<Block>Block name</Block>
<Color>Color name</Color>
<ImageIndex>1</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
</TreeNodeData>
</Nodes>
</TreeNodeData>
</Nodes>
</TreeViewData>
End Class
-
Oct 2nd, 2016, 08:31 AM
#5
Thread Starter
Lively Member
Re: vb.net read xml to listview and textbox
Thanks dbasnett this is just perfect
How do I hide Root
-
Oct 2nd, 2016, 09:09 AM
#6
Re: vb.net read xml to listview and textbox
See if this helps, note the commented lines.
Code:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'build aTreeView
aTreeView.Nodes.Clear()
'aTreeView.Nodes.Add("Root")
Dim ie As IEnumerable(Of XElement)
ie = From el In xe.<Nodes>.<TreeNodeData> Select el.<Text>.FirstOrDefault
'get category nodes
For Each el As XElement In ie
Dim tn As New TreeNode(el.Value)
'get name nodes
For Each sel As XElement In el.Parent...<TreeNodeData>
Dim stn As New TreeNode(sel.<Text>.Value)
stn.Tag = sel 'will be used in treeview select
tn.Nodes.Add(stn)
Next
'aTreeView.Nodes(0).Nodes.Add(tn)
aTreeView.Nodes.Add(tn)
Next
End Sub
-
Oct 2nd, 2016, 12:36 PM
#7
Thread Starter
Lively Member
Re: vb.net read xml to listview and textbox
Thanks again dbasnett Relay need to ask how can I save changes back to the Xml file
if I want to save = <Color>Color name</Color>
Code:
If e.Node.Tag IsNot Nothing Then
Dim foo As XElement = DirectCast(e.Node.Tag, XElement)
For Each el As XElement In foo.Elements
' MsgBox(el.Name.ToString)
If el.Name.ToString = "Layer" Then
Txt_layer.Text = el.Value
End If
If el.Name.ToString = "Line" Then
Txt_Line.Text = el.Value
End If
If el.Name.ToString = "Block" Then
Txt_Block.Text = el.Value
End If
If el.Name.ToString = "Color" Then
Txt_Color.Text = el.Value
End If
Next
End If
-
Oct 2nd, 2016, 02:23 PM
#8
Re: vb.net read xml to listview and textbox
Try this
Code:
Private Sub SetElementValue(xNode As XmlNode, strElementName As String, strValue As String)
If xNode IsNot Nothing Then
Dim xE As XmlNode = xNode.SelectSingleNode(strElementName)
If xE IsNot Nothing Then
xE.InnerText = strValue
End If
End If
End Sub
Usage:
Code:
SetElementValue (DirectCast(e.Node.Tag, XElement), "Color", "Color name")
Last edited by 4x2y; Oct 2nd, 2016 at 02:27 PM.
-
Oct 2nd, 2016, 02:57 PM
#9
Re: vb.net read xml to listview and textbox
Here is the entire example again, with the addition of a button 2, and changes to AfterSelect. The XML that is being placed in various .Tag are references to the original as you will see.
Code:
Imports <xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Imports <xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'build aTreeView
aTreeView.Nodes.Clear()
'aTreeView.Nodes.Add("Root")
Dim ie As IEnumerable(Of XElement)
ie = From el In XE.<Nodes>.<TreeNodeData> Select el.<Text>.FirstOrDefault
'get category nodes
For Each el As XElement In ie
Dim tn As New TreeNode(el.Value)
'get name nodes
For Each sel As XElement In el.Parent...<TreeNodeData>
Dim stn As New TreeNode(sel.<Text>.Value)
stn.Tag = sel 'will be used in treeview select
tn.Nodes.Add(stn)
Next
'aTreeView.Nodes(0).Nodes.Add(tn)
aTreeView.Nodes.Add(tn)
Next
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If tbcolor.Tag IsNot Nothing Then
Dim foo As XElement = DirectCast(tbcolor.Tag, XElement)
foo.<Color>.Value = tbcolor.Text
Debug.WriteLine(XE.ToString)
Stop 'look at XE
'to save
' XE.Save(path)
End If
End Sub
Private Sub aTreeView_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles aTreeView.AfterSelect
If e.Node.Tag IsNot Nothing Then
Dim foo As XElement = DirectCast(e.Node.Tag, XElement)
tblay.Text = foo.<Layer>.Value
tbline.Text = foo.<Line>.Value
tbblk.Text = foo.<Block>.Value
tbcolor.Text = foo.<Color>.Value
tblay.Tag = foo
tbline.Tag = foo
tbblk.Tag = foo
tbcolor.Tag = foo
End If
End Sub
'to load from a file
' Dim xe As XElement = XElement.Load("Your Path Here")
' for testing
Dim XE As XElement = <TreeViewData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Nodes>
<TreeNodeData>
<Text>Category 1</Text>
<ImageIndex>0</ImageIndex>
<SelectedImageIndex>1</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
<Nodes>
<TreeNodeData>
<Text>Name 1</Text>
<Layer>Layer name</Layer>
<Line>Line name</Line>
<Block>Block name</Block>
<Color>Color name</Color>
<ImageIndex>1</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>true</Checked>
<Expanded>false</Expanded>
</TreeNodeData>
<TreeNodeData>
<Text>Name 2</Text>
<Layer>Layer name2</Layer>
<Line>Line name2</Line>
<Block>Block name2</Block>
<Color>Color name2</Color>
<ImageIndex>1</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>true</Checked>
<Expanded>false</Expanded>
</TreeNodeData>
</Nodes>
</TreeNodeData>
<TreeNodeData>
<Text>Category 2</Text>
<ImageIndex>0</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
<Nodes>
<TreeNodeData>
<Text>Name 1</Text>
<Layer>Layer name</Layer>
<Line>Line name</Line>
<Block>Block name</Block>
<Color>Color name</Color>
<ImageIndex>1</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
</TreeNodeData>
</Nodes>
</TreeNodeData>
</Nodes>
</TreeViewData>
End Class
-
Oct 3rd, 2016, 06:50 PM
#10
Thread Starter
Lively Member
Re: vb.net read xml to listview and textbox
Thanks dbasnett for your help ! and 4x2y your your help
-
Oct 27th, 2017, 07:33 AM
#11
Thread Starter
Lively Member
Re: vb.net read xml to listview and textbox
Hi
tell me when I change the XML file in Notepad and try to reload the XML file I don't get the changes need to close and open the form again
how can I reload the XML file
Code:
'build aTreeView
aTreeView.Nodes.Clear()
'aTreeView.Nodes.Add("Root")
Dim ie As IEnumerable(Of XElement)
ie = From el In XE.<Nodes>.<TreeNodeData> Select el.<Text>.FirstOrDefault
'get category nodes
For Each el As XElement In ie
Dim tn As New TreeNode(el.Value)
'get name nodes
For Each sel As XElement In el.Parent...<TreeNodeData>
Dim stn As New TreeNode(sel.<Text>.Value)
stn.Tag = sel 'will be used in treeview select
tn.Nodes.Add(stn)
Next
'aTreeView.Nodes(0).Nodes.Add(tn)
aTreeView.Nodes.Add(tn)
Next
-
Oct 27th, 2017, 08:24 AM
#12
Re: vb.net read xml to listview and textbox
I am a little confused by what you mean. Before executing the code shown you should have
Code:
XE = XElement.Load("PATH HERE")
-
Oct 27th, 2017, 10:44 AM
#13
Thread Starter
Lively Member
Re: vb.net read xml to listview and textbox
Thanks
Too easy Just did not see the solution
-
Oct 27th, 2017, 03:40 PM
#14
Thread Starter
Lively Member
Re: vb.net read xml to listview and textbox
Thanks dbasnett
Can I Go a little further and ask about add new and delete from the tree
-
Oct 31st, 2017, 07:59 AM
#15
Thread Starter
Lively Member
Re: vb.net read xml to listview and textbox
Hi
I am finish to find out how I can add new but not how to add new Category
Code:
Dim foo As XElement = DirectCast(Form1.Mytreev.SelectedNode.Tag, XElement)
foo.AddAfterSelf( _
New XElement("TreeNodeData", "", _
New XElement("Text", Lab_tegund.Text), _
New XElement("Layer", Lab_layer.Text), _
New XElement("Line", strengur), _
New XElement("Block", Lab_block.Text), _
New XElement("BlockNafn", Lab_block_nafn.Text), _
New XElement("Color", Lab_color.Text), _
New XElement("ImageIndex", "1"), _
New XElement("SelectedImageIndex", "2"), _
New XElement("Checked", "false"), _
New XElement("Expanded", "false")))
-
Oct 31st, 2017, 09:32 AM
#16
Re: vb.net read xml to listview and textbox
Not sure what you are asking. When creating new xelements consider this form,
Code:
Dim newEl As XElement = <TreeNodeData>
<Text><%= Lab_tegund.Text %></Text>
<Layer><%= Lab_layer.Text %></Layer>
<Line><%= strengur %></Line>
<Block><%= Lab_block.Text %></Block>
<BlockNafn><%= Lab_block_nafn.Text %></BlockNafn>
<Color><%= Lab_color.Text %></Color>
<ImageIndex>1</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
</TreeNodeData>
See https://docs.microsoft.com/en-us/dot...n-xml-literals
-
Oct 31st, 2017, 09:57 AM
#17
Thread Starter
Lively Member
Re: vb.net read xml to listview and textbox
Thanks will check this out
I was thinning about Category in the tree how I can add new Category to the tree
Code:
<TreeNodeData>
<Text>Category 1</Text>
<ImageIndex>0</ImageIndex>
<SelectedImageIndex>1</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
<Nodes>
Last edited by ssalomon; Oct 31st, 2017 at 10:03 AM.
-
Oct 31st, 2017, 10:19 AM
#18
Re: vb.net read xml to listview and textbox
Originally Posted by ssalomon
Thanks will check this out
I was thinning about Category in the tree how I can add new Category to the tree
Code:
<TreeNodeData>
<Text>Category 1</Text>
<ImageIndex>0</ImageIndex>
<SelectedImageIndex>1</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
<Nodes>
Create a method that takes an XElement and treeview as arguments. Then call the method with the new xelement and treeview.
The method
Code:
Public Sub AddNode(el As XElement, someTreeview As TreeView)
Dim newNode As New TreeNode(el.<Text>.Value)
newNode.Tag = el
someTreeview.Nodes.Add(newNode)
End Sub
Calling
Code:
Dim newEl As XElement = <TreeNodeData>
<Text><%= Lab_tegund.Text %></Text>
<Layer><%= Lab_layer.Text %></Layer>
<Line><%= strengur %></Line>
<Block><%= Lab_block.Text %></Block>
<BlockNafn><%= Lab_block_nafn.Text %></BlockNafn>
<Color><%= Lab_color.Text %></Color>
<ImageIndex>1</ImageIndex>
<SelectedImageIndex>2</SelectedImageIndex>
<Checked>false</Checked>
<Expanded>false</Expanded>
</TreeNodeData>
AddNode(newEl, aTreeView)
-
Nov 3rd, 2017, 03:54 PM
#19
Thread Starter
Lively Member
Re: vb.net read xml to listview and textbox
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|