Buenas, soy nuevo en este foro, pero he leido las reglas
Hace ya bastante tiempo estoy tratando de entender bien el manejo de XML en VS.NET, y para ello creé un pequeño formulario (solo textbox, botones y labels) con el objetivo de leer un archivo xml, hacerle cambios (añadir informacion, borrar, editar, etc) y luego guardarlo.
Los metodos para hacerlo son bastante directos y simples, pero me he topado con un problema al cual no le he encontrado solucion en ninguna de las paginas especializadas que he leido.
Mi archivo XML está basado en un esquema xsd que he hecho en el diseñador de VS.NET. consta de un simpleType, un complexType y un árbol de elementos (adjunto el diseño como imagen). Este esquema tiene su correspondiente archivo xml con dos filas deinformación que he agregado mediante el diseñador de VS.NET. El formulario tiene un dataset con el esquema asignado y todos los campos de texto estan correctamente "unidos" a los correspondientes campos de mi dataset (customerList1).
El procedimiento que uso para abrir el archivo es:
private void LoadXML(string Filename)
{
if (Filename!="")
{
customerList1.Clear();
this.OpenedFile = Filename; //propiedad que guarda el archivo abierto
customerList1.ReadXml(this.OpenedFile);
}
}
Funciona de marabilla y tengo unos botones que me mueven entre los distintos registros del dataset (tal cual en los ejemplos del MSDN).
El borrar tambien funciona de marabilla.
el problema es para añadir nuevos registros.
Este es mi codigo actual:
private void btn_ingresa_Click(object sender, System.EventArgs e)
{
//creo todas las filas necesarias
DataRow CR = customerList1.customer.NewRow();
DataRow BTAR = customerList1.BillToAddress.NewRow();
DataRow STAR = customerList1.ShipToAddress.NewRow();
//seteo valores iniciales
CR.ItemArray = new Object[] {"","","",""};
BTAR.ItemArray = new Object[] {"","","",00000};
STAR.ItemArray = new Object[] {"","","",00000};
//añado las filas a las tablas correspondientes
customerList1.Rows.Add(CR);
customerList1.BillToAddress.Rows.Add(BTAR);
customerList1.ShipToAddress.Rows.Add(STAR);
//le digo que muestre las nuevas filas
this.BindingContext[customerList1,"customer"].Position = this.BindingContext[customerList1,"customer"].Count;
positionChanged();
}
Y esto es lo que funciona a medias. me explico:
una vez creo la nueva fila en todas las tablas, y edito su contenido mediante el formulario, y luego grabo el archivo (customerList1.WriteXml()), solo guarda la primera tabla, esto es los valores de CompanyName, ContactName,Email y Phone, mientras que los valores de las otras dos tablas (que segun yo deberian escribirse también) se omiten, incluso se borran del formulario mismo antes de grabar (¿quiere decir que de alguna forma esos valores nunca entran al dataset?).
Mis intuiciones me dicen que no estoy creando bien las filas para estas tablas "hijas" y que es por esto que no guarda estos valores, pero he tratado de hacerlo de muchas formas ya. Cuando creo la fila para la tabla customer, no crea automaticamente las filas para las tablas hijas BillToAddress y ShipToAddress, y no he podido acceder a darles valores.
Bueno, muchas gracias por leer hasta aqui, y si me pueden ayudar en cualquier manera estare muy agradecido. Como muchos, estoy haciendo esto por el amor a aprender
.
Saludos desde Chile.