Ayuda XML - Dataset - Listbox

22/06/2004 - 01:09 por JKarlos | Informe spam
Hola amigos, estoy aqui empezando con vbnet, y quisiera que me ayuden con un
problerma que tengo.
Tengo un archivo xml de la forma
<root>
<persona>
<idempleado>1</idempleado>
<nombre>AAA</nombre>
<empleado>1</empleado>
</persona>
<persona>
<idempleado>2</idempleado>
<nombre>BBB</nombre>
<empleado>1</empleado>
</persona>
<persona>
<idempleado>3</idempleado>
<nombre>CCC</nombre>
<empleado>0</empleado>
</persona>
</root>

En una pantalla donde se encuentre dos listboxs (listboxO / listboxD) debo
mostrar en uno de ellos(listboxO) los nombres de los empleados y el otro
debe aparecer vacio, y en medio de los listbox dos botones de insercion y
eliminacion.
Estos botones tienen la finalidad de pasar del listbox origen al destino, y
una vez que los he pasado, debo de actualizar el dataset y luego debo de
actualizar el archivo xml origen y actualizar la etiqueta empleado: debo
verificar los empleados que estan a la derecha y cambiar la etiqueta
empleado a 1 y los que se quedan a la izquierda con 0

Para que sea mas rapido, la informacion del xml, lo estoy guardando en un
dataset, he podido recuperar la informacion del archivo xml al dataset y del
dataset lo he puesto en uno de los listbox (origen), pero ahi es donde me
quedo, pues no se como manejar y pasar los datos al otro listbox (destino) y
como actualizar nuevamente el xml.

Espero sus respuesta y muchas gracias.

Preguntas similare

Leer las respuestas

#1 Tristan
22/06/2004 - 14:00 | Informe spam
Espero haber entendido bien tu problema.

Puedes usar XPath para obtener una lista de nodos, y
modificarlos si es necesario.

Con esto listas los nombres de cliente y modificas el
primero de ellos:

Dim xml As New XmlDocument()
xml.Load("TuDocumento.xml")

Dim nodos As XmlNodeList = xml.SelectNodes
("//clientes/cliente/nombre")
Dim nodo As XmlNode
For Each nodo In nodos
MsgBox(nodo.InnerText)
Next
nodos(0).InnerText = "Otro"
MsgBox(xml.InnerXml) 'Cambiado xmldoc
Respuesta Responder a este mensaje
#2 Tristan
22/06/2004 - 14:04 | Informe spam
Perdón jha habido un desliz. Debía ser:

Dim nodos As XmlNodeList = xml.SelectNodes
("//root/persona/nombre")

Por cierto, no estoy utilizando dataset. ¿Estás seguro de
que es la mejor opción?
Respuesta Responder a este mensaje
#3 JKarlos
22/06/2004 - 16:25 | Informe spam
Hola Tristan y gracias por la ayuda, creo que mejor seria usar el dataset,
pues lo que estoy haciendo (se podria decir que es un modulo) sera acoplado
a otros modulos.

Este es mas o menos el codigo como recupero la informacion del xml al
dataset:

'agrego la informacion del xml al dataset:
fsReadXml = New System.IO.FileStream("..\Empleados.xml",
System.IO.FileMode.Open)
myXmlReader = New System.Xml.XmlTextReader(fsReadXml)
dsMapeo1.ReadXml(myXmlReader)
myXmlReader.Close()
'paso la informacion del dataset al listbox:
lstTablasO.DataSource = dsMapeo1.Tables(0)
lstTablasO.DisplayMember = "nombre"
lstTablasO.ValueMember = "idempleado"

Desde este listbox mostrado en un windows form, quiero pasar a otro listbox.
y luego con otro boton actualizar la cadena xml,



Espero me sigas(n) ayudando.




"Tristan" escribió en el mensaje
news:1f5e101c45851$2351b890$
Perdón jha habido un desliz. Debía ser:

Dim nodos As XmlNodeList = xml.SelectNodes
("//root/persona/nombre")

Por cierto, no estoy utilizando dataset. ¿Estás seguro de
que es la mejor opción?
Respuesta Responder a este mensaje
#4 Tristan
22/06/2004 - 19:47 | Informe spam
Creo que esto hace lo que quieres.

Private dsEmpleados As New DataSet
Private cmO As CurrencyManager
Private cmD As CurrencyManager

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
dsEmpleados.ReadXml("..\empleados.xml")
ListBoxO.DataSource = dsEmpleados.Tables(0)
ListBoxO.DisplayMember = "nombre"
cmO = DirectCast(Me.BindingContext(dsEmpleados.Tables(0)),
CurrencyManager)

Dim vista As New DataView(dsEmpleados.Tables(0))
vista.RowFilter = "empleado = 0"
ListBoxD.DataSource = vista
ListBoxD.DisplayMember = "nombre"
cmD = DirectCast(Me.BindingContext(vista), CurrencyManager)
End Sub

Private Sub Form1_Closed(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Closed
dsEmpleados.WriteXml("..\empleados.xml")
End Sub

Private Sub Añadir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Añadir.Click
Dim fila As DataRowView = DirectCast(cmO.Current, DataRowView)
fila("empleado") = "0"
cmO.EndCurrentEdit()
End Sub

Private Sub Eliminar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Eliminar.Click
Dim fila As DataRowView = DirectCast(cmD.Current, DataRowView)
fila("empleado") = "1"
cmD.EndCurrentEdit()
End Sub

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#5 Tristan
22/06/2004 - 20:00 | Informe spam
Creo que muestra lo útil que es CurrencyManager. ¿No crees?. No se necesita
ValueMember, puesto que Current te da acceso a toda la fila actual.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida