Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/11/2009, 05:27
spike_spiegel
 
Fecha de Ingreso: noviembre-2009
Mensajes: 3
Antigüedad: 15 años, 3 meses
Puntos: 0
No me guarda archivos serializados correctamente

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.

Última edición por spike_spiegel; 24/11/2009 a las 05:33 Razón: Otros