TreeView y Select ... To Xml Auto

Tengo un SELECT ... FOR XML AUTO que me devuelve el siguiente resultado
Lo que necesito es esto poder mostrarlo en .NET con un TreeView, pudiendo mostrar lo siguiente:
+ Productos
+---- Semillas de amapola x 1000
+---- Semillas de mostaza x 1000
Y en el mismo tener el número de producto disponible al momento de la ejecución de un evento.
No sé como hacer que me funcione esto... ¿Me podrías ayudar?
Mando muchos pero muchos besos de antemano
La más linda

6 Respuestas

Respuesta
1
Bueno como creo que tu sabes como moverte muy bien en esto, ya que he leído algunas respuestas tuyas sobre el uso del treeview.
Respecto a tu duda, la solución simple la tienes agregándole al Tag del nodo del treeview el numero del producto.
Algo como esto
Dim node As New TreeNode
node.Text = "Semillas de amapola x 1000"
node.Tag = Numero_Producto
TreeView1. Nodes. Add (node)
De forma tal que en el evento tengas disponible esa propiedad.
Por ejemplo en el evento AfterSelect del treeview tienes como argumento
e As System. Windows. Forms. TreeViewEventArgs
pues con e.tag dentro de este evento ya tienes el numero de producto que agregaste.
Cualquier otra duda házmelo saber.
Te mando un ejemplo que me encontré por ahí para pasar del xml al treeview en el que te puedes apoyar también
Sub leexml()
Dim xmlR As New XmlTextReader("..\..\XMLFileDatos.Xml")
Do While xmlR.Read()
If xmlR.NodeType = XmlNodeType.Element Then
'Nodo raíz
Dim node As New TreeNode
node.Text = xmlR.Name
TreeView1.Nodes.Add(leerSubNodos(xmlR.ReadSubtree, xmlR.Depth, node))
End If
Loop
TreeView1.AllowDrop = True
End Sub
Private Function leerSubNodos(ByVal xmlR As XmlReader, ByVal nivel As Integer, ByRef node As TreeNode) As TreeNode
xmlR.Read()
Do While xmlR.Read()
If xmlR.NodeType = XmlNodeType.Element Or xmlR.NodeType = XmlNodeType.Text Then
Dim newNode As TreeNode = node.Nodes.Add(xmlR.Name)
If xmlR.NodeType = XmlNodeType.Text Then
newNode.Text = xmlR.Value
End If
If xmlR.NodeType = XmlNodeType.Element And nivel <= xmlR.Depth Then
leerSubNodos(xmlR.ReadSubtree, xmlR.Depth, newNode)
End If
End If
Loop
leerSubNodos = node
End Function
Respuesta
1
Pero no veo el resultado, puedes copiarlo de nuevo...
Perdón la omisión!
Veo que el problema es que no me deja usar tags de XML, por eso no muestra el resultado
Reemplazo signo menor por / y signo mayor por \
/productos\
/producto ID="10" Nombre="Semillas x100gr" /\
/producto ID="20" Nombre="Semillas x200gr" /\
//productos\
Que crees, sigue sin verse, puedes ver si lo puedes colocar como texto...
Sustituyo signo menor por / y mayor por \
/productos\
/Producto ID="001" Nombre="Semillas de amapola"/\
/Producto ID="002" Nombre="Semillas de mostaza" /\
//productos\
Pues tendrás que usar el DOM y de ahí generar la lectura del archivo y posteriormente ir generado las ramas de los árboles del treeview. Sugiero que veas los ejemplos existentes en la siguiente liga:
Respuesta
1
Que pena contigo pero la verdad en esta ocasión no te entendí bien (no se si fue que enviaste alguna imagen del xml y ésta no llego)
Entiendo ésto:
Quieres armar un treeview así:
+Productos(con el mas sale la lista de productos)
    Semilla xxxx
    Semilla yyyy
    Semilla zzzz
Pero no entiendo en donde quieres tener eso del numero de existencias disponibles.
Seria bueno ver la estructura de tu xml
Gracias por la respuesta!
Definitivamente escribí una estructura XML y no la muestra!
Sustituyo signo menor por / y mayor por \
/productos\
/Producto ID="001" Nombre="Semillas de amapola"/\
/Producto ID="002" Nombre="Semillas de mostaza" /\
//productos\
Gracias!
Listo ya te entendí la estructura, pero no te entiendo bien eso del numero de existencias disponibles exactamente que quieres hacer con el.
Gracias por la respuesta y perdón por la demora!
Al tener ese XML necesito llenar un treeview pero necesito que me muestre el nombre en el nodo:
+--- Semillas de amapola
+--- Semillas de mostaza
Y cuando haga click en el nombre pueda enviar el número de producto a otro formulario.
Esto es dinámico lo cual justamente estoy utilizando una consulta SELECT ... FOR XML AUTO porque por cada productor debería desplazar todos los productos que él vende.
Muchas gracias y muchos besos
uhm ya veo.
Bueno lo que tienes que hacer es, como supongo que tu llenas eso en html enlazándolo con un xmlsource entonces en el valuefield le colocas el "ID" del producto y en el textfield el "Nombre".
Recuerda que cada nodo tiene una propiedad text y una value, entonces cuando se produzca el click puedes saber cual nodo fue y cuando era el valor de su value para obtener el código del producto.
Te muestro como lleno yo un Menu desde un xml, es muy parecido.
---------------------------
Gracias por tu respuesta!
No se ve lo que me has enviado... ¿Podrías reenviarlo?
La más linda
UHM, como que no deja ver html, entones hago lo mismoq ue tu, reemplazo los menor /* y los mayor por *\
/*asp:Menu ID="Menu2" runat="server" DataSourceID="xdsMenu" Orientation="Horizontal"
BackColor="#99CC00" BorderColor="White" BorderStyle="Solid" BorderWidth="1px" Font-Names="Arial"
Font-Size="Small" StaticEnableDefaultPopOutImage="False" Visible="true" StaticSubMenuIndent="10px"
DynamicHorizontalOffset="1" DynamicVerticalOffset="1" StaticMenuItemStyle-HorizontalPadding="5" DynamicMenuItemStyle-HorizontalPadding="5" *\
/*StaticMenuStyle BackColor="#99CC00"/*\
/*StaticSelectedStyle BackColor="#009900" /*\
/*StaticHoverStyle BackColor="#009900" ForeColor="White" BorderStyle="Solid" /*\
/*StaticMenuItemStyle BackColor="Transparent" BorderColor="White" BorderStyle="Solid" Font-Bold="true" ForeColor="white" BorderWidth="1px" /*\
/*DynamicHoverStyle BackColor="#99CC00" BorderColor="White" BorderStyle="None" Font-Names="Arial" ForeColor="White" /*\
/*DynamicMenuStyle BackColor="White" BorderColor="#009900" BorderStyle="None" /*\
/*DynamicSelectedStyle BackColor="#009900" BorderColor="White" /*\
/*DynamicMenuItemStyle BackColor="White" BorderColor="#99CC00" BorderWidth="1px" Font-Names="Arial" ForeColor="#009900" /*\
/*DataBindings*\
/*asp:MenuItemBinding DataMember="itemmenu" NavigateUrlField="url" TextField="text" /*\
/*asp:MenuItemBinding DataMember="submenu" TextField="text" NavigateUrlField="url" /*\
/*/DataBindings*\
/*/asp:Menu*\
/*/td*\
/*/tr*\
/*/table*\
/*asp:XmlDataSource ID="xdsMenu" runat="server" DataFile="~/Xml/mnuAdmin.xml" XPath="menu/itemmenu"*\/*/asp:XmlDataSource*\
Respuesta
1
Debes agregar un SiteMapdatatSourceControl y asociarselo al TreeView.
El XML debes garabarlo en un archivo y asociar ese archivo al SiteMApDataSource.
Respuesta
1
Aquí tienes un ejemplo de como rellenar un treeview desde un dataset
Dim DSNWind As DataSet
Dim CNnwind As New SqlClient.SqlConnection("DATA SOURCE=servername;USER ID=;PASSWORD=;INITIAL CATALOG=northwind;") '<==== CHANGE HERE
Dim DACustomers As New SqlClient.SqlDataAdapter("SELECT CustomerID, CompanyName, ContactName, Country FROM customers WHERE country = 'Germany'", CNnwind)
Dim DAOrders As New SqlClient.SqlDataAdapter("SELECT CustomerID, OrderID, OrderDate, ShippedDate, ShipVia, Freight FROM orders where customerid in (select customerid from customers where country = 'Germany')", CNnwind)
Dim DAOrderDetails As New SqlClient.SqlDataAdapter("Select * from [Order Details] where OrderID in (SELECT OrderID FROM orders where customerid in (select customerid from customers where country = 'Germany'))", CNnwind)
DSNWind = New DataSet()
CNnwind. Open()
DACustomers.Fill(DSNWind, "dtCustomers")
DAOrders.Fill(DSNWind, "dtOrders")
DAOrderDetails.Fill(DSNWind, "dtOrderDetails")
'Close the connection to the data store; free up the resources
CNnwind.Close()
'Create a data relation object to facilitate the relationship between the Customers and Orders data tables.
DSNWind.Relations.Add("CustToOrd", DSNWind.Tables("dtCustomers").Columns("CustomerID"), DSNWind.Tables("dtOrders").Columns("CustomerID"))
DSNWind.Relations.Add("OrdToDet", DSNWind.Tables("dtOrders").Columns("OrderID"), DSNWind.Tables("dtOrderdetails").Columns("OrderID"))
'''''''''''''''''''''''
TreeView1.Nodes.Clear()
Dim i, n As Integer
Dim parentrow As DataRow
Dim ParentTable As DataTable
ParentTable = DSNWind.Tables("dtCustomers")
For Each parentrow In ParentTable.Rows
Dim parentnode As TreeNode
parentnode = New TreeNode(parentrow.Item(0))
TreeView1.Nodes.Add(parentnode)
''''populate child'''''
'''''''''''''''''''''''
Dim childrow As DataRow
Dim childnode As TreeNode
childnode = New TreeNode()
For Each childrow In parentrow.GetChildRows("CustToOrd")
childnode = parentnode.Nodes.Add(childrow(0) & " " & childrow(1) & " " & childrow(2))
childnode.Tag = childrow("OrderID")
''''populate child2''''
''''''''''''''''''''''''''
Dim childrow2 As DataRow
Dim childnode2 As TreeNode
childnode2 = New TreeNode()
For Each childrow2 In childrow.GetChildRows("OrdToDet")
childnode2 = childnode.Nodes.Add(childrow2(0))
Next childrow2
''''''''''''''''''''''''
Next childrow
'''''''''''''''
Next parentrow
Espero que te sirva.
¿Por cierto pudiste agregar las referencias para manipular imagenes a tu servicio web?
Muchas gracias por la respuesta!
Pude hacer lo de referencia en el servicio de windows... Simplemente botón derecho en el servicio / referencias / System.Drawing... Demasiado sencillo a lo que esperaba!
Respuesta
1
No entiendo muy bien tu pregunta pero pienso que lo que quieres hacer es un treeview informativo en donde en el evento que cambie de nodo actualice la información para que se muestre la cantidad de producto
http://www.elguille.info/vb/ejemplos/treeview.htm
En esta página te mmuestra como actualizar y tratar los treeview desde vb.net
espero que te sirva saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas