2013-03-05 2 views
0

// Mise à jour J'ai ajouté les corrections et fourni le code Form1.c dans son intégralité.Xml Sérialisation de la valeur MaskedText stockée dans la chaîne membre

Dans l'intérêt de la simplicité, j'ai un peu baissé un peu. Donc, tous mes contrôles de formulaire sont définis. Date comme DateTimePicker (Short), Employee Number comme maskedTextBox ("### - ##"), Employee Name comme textBox simple, SS Number comme maskedTextBox (SSNum standard), etc pour le plaisir de cette question. Pour gérer toutes ces données que j'ai créé une classe appelée Employee_Data, comme suit ...

namespace Employee 
{ 
    public class Employee_Data 
    { 
     //Make Members Xml elements 
     [XmlElement("EmployeeNumber")] 
     public String EmployeeNumber {get; set;} 
     [XmlElement("Date")] 
     public DateTime Date {get; set;} 
     [XmlElement("EmployeeName")] 
     public String EmployeeName {get; set;} 
     [XmlElement("SSNumber")] 
     public String SSNumber {get; set;} 


    } 
} 

je créer un objet dans le Form1.cs appelé e_d et utiliser l'événement automatique dans le traitement VS. Le débogueur montre que les valeurs sont bien stockées dans l'objet de classe (les valeurs maskedText incluent les tirets). Cependant, une fois que je tente de sérialiser les données ci-dessous, les textValues ​​masqués ne figurent pas dans le fichier xml ...

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Xml.Serialization; 
using System.IO; 
using System.Xml; 

namespace Employee 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     Employee_Data e_d = new Employee_Data(); 

     private void EmployyeeNumber_TextChanged(object sender, EventArgs e) 
     { 
      e_d.EmployeeNumber=EmployeeNumber.Text; 
     } 

     private void Date_ValueChanged(object sender, EventArgs e) 
     { 
      e_d.Date=Date.Value; 

     } 

     private void EmployeeName_TextChanged(object sender, EventArgs e) 
     { 
      e_d.EmployeeName=EmployeeName.Text; 
     } 



     private void SSNumber_ValueChanged(object sender, EventArgs e) 
     { 
      e_d.SSNumber=SSNumber.Text; 
    } 


    private void saveButton_Click(object sender, EventArgs e) 
    { 
     saveFileDialog1.DefaultExt = "xml"; 
     saveFileDialog1.Filter = "XML File (.xml)|*.xml"; 
     saveFileDialog1.AddExtension = true; 
     saveFileDialog1.RestoreDirectory = true; 
     saveFileDialog1.ShowDialog(); 
    } 


private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) 
{ 
    string name = saveFileDialog1.FileName; 


    using (TextWriter texWrt = new StreamWriter(saveFileDialog1.FileName)) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(Employee_Data)); 
     serializer.Serialize(texWrt, e_d); 
    } 
} 

J'ai fait des recherches cette question et il ne semble pas être beaucoup plus sur ce sujet spécifique.

+0

Vous n'avez pas besoin de faire 'new Employee_Data()' si vous remplacez ensuite cet objet par 'e_d' sur la ligne suivante. –

+0

Merci. Changé cela aussi. – user2136863

Répondre

0

La réponse était la gestion d'événements, ou PROGRAMMER FAILURE. Lorsque le programmeur a codé à la main la gestion des événements pour la saisie de texte (car la valeur par défaut dans VS est MaskInputRejected), il a oublié de définir le gestionnaire d'événement. Je ferai en sorte d'avoir une conversation avec le programmeur sur tout ça, tout le monde. Mais il a beaucoup appris sur csharp et xml dans le processus. Merci à tous pour avoir mis leur temps à aider.

Questions connexes