Muy buenas, primeras de todo quiero presentarme puesto que hace un tiemppo que sigo el foro desde mi trabajo para ciertas dudas y hoy me he arrancado a plantear una duda existencial y cuya respuesta no he encontrado y la necesito para un proyecto de mi empresa.
Vereis, tengo un proyecto de informes. Este proyecto genera plantillas (una clase que no es más que ) sobre la cual insertas elementos(que son otras instancias de clases como un gráfico o una etiqueta).
El problema lo tengo al guardar plantillas. Es decir, una plantilla son una serie de elementos insertados. Pues mi idea fue en serializarlo todo y guardarlo para luego cargarlo. El problema viene en que cuando modificas añadiendo cosas funciona, pero si eliminas cosas que ya estaban cuando cargaste dicha plantilla no funciona. Lo más raro es que cuando añades algo para borrarlo si que lo deja borrado.
Os pongo fragmentos de codigo explicados para que os sea más facil de entender todo.
Código:
#1: Código de borrado de elementos(por si noatais algo raro)
private void OnDeleteReportElement(object sender, RoutedEventArgs e)
{
if (CurrentDocument != null && CurrentDocument.ContentControl != null)
//El current document es la plantilla actual
{
Canvas canvas = CurrentDocument.ContentControl.Content as Canvas;
if (canvas != null)
{
IReportElement re = CurrentDocument.SelectionManager.SelectedElement;
if (re != null)
{
CurrentDocument.SelectionManager.ReportElements.Remove(re);
canvas.Children.Remove(re.UserInterface);
}
}
}
}
#2: Código de guardado
private void SaveTemplateCmdExecuted(object sender, ExecutedRoutedEventArgs e)
{
AnalyticalTestReport report = CurrentDocument as AnalyticalTestReport;
//AnalyticalTestReport report es la plantilla con los elementos insertados
if (report != null)
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.AddExtension = true;
dlg.OverwritePrompt = true;
dlg.CreatePrompt = false;
dlg.Filter = "XAML File (*.xaml)|*.xaml";
if (dlg.ShowDialog() == true && !String.IsNullOrEmpty(dlg.FileName))
{
report.SaveTemplateTo(dlg.FileName);
}
}
}
#3:El guardado mediante serialización
public void SaveTemplateTo(string filename)
{
XElement templateXaml = CreateTemplateXaml();
using (FileStream fstream = new FileStream(filename, FileMode.Create))
{
using (XmlWriter writer = XmlWriter.Create(fstream, new XmlWriterSettings { Indent = true }))
{
templateXaml.WriteTo(writer);
}
}
}
Lo que he probado ha sido a borrar el archivo en donde guardo dicha plantilla para crearlo de nuevo y otras cosas que ahora no me acuerdo. Si pudierais ayudarme sería un detalle impagable.
Gracias.
Supongo que hasta mañana no pdré ver sus respuestas así que pido perdón por si contestan y no puedo contestar yo.