将详细信息从xml文件还原到winform

时间:2013-02-16 20:01:25

标签: c# xml winforms visual-studio xml-deserialization

enter image description here enter image description here
这里我通过序列化将详细信息从form1保存到data.xml。

现在,我想通过在表单2中搜索患者ID来查看详细信息,并在单击Form2中的“还原”按钮时还原到Form1的文本框中。

public class PatientData    {    public long Patient_ID;    public string Name;    public string Address;    public long Mobile;     }    private void Patient_clear()    {    Patient_ID.Text = "";    Mobile.Text = "";    Address.Text = "";    Name.Text = "";    }    private List<PatientData> GetPatients(string filename)   {    if (!File.Exists(filename))    return new List<PatientData>();    XmlSerializer xs = new XmlSerializer(typeof(List<PatientData>));    using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate))    return (List<PatientData>)xs.Deserialize(fs);   }    public void SavePatients(string filename, List<PatientData> Patients)    {    XmlSerializer xs = new XmlSerializer(typeof(List<PatientData>));   using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate))    xs.Serialize(fs, Patients);   }   private void load_Click(object sender, EventArgs e)   {   System.Windows.Forms.Form Form2 = new Form2();   Form2.Show();   }   private void save_Click(object sender, EventArgs e)   {   List<PatientData> Patients = GetPatients(@"D:\PatientD.xml");   PatientData patient = new PatientData();   patient.Patient_ID = Patient_ID.MaxLength;   patient.Name = Name.Text;   patient.Address = Address.Text;   patient.Mobile = Mobile.MaxLength;   Patients.Add(patient);   SavePatients(@"D:\Sarath\Project\XML\curarisd\PatientD.xml", Patients);    MessageBox.Show("Inserted");   Patient_clear();   }

我还没有尝试过坦率地恢复数据我不知道xml它的大学项目..请帮我学习。现在我的问题是我想通过在form2中搜索Patient ID并从form1中显示来恢复PatientD.xml中的数据

注意:它是一个有两种形式的项目

1 个答案:

答案 0 :(得分:1)

听起来你就在那里。 data.xml是否包含患者详细信息的列表,还是将单个实例序列化为单独的文件?这是一个重要的问题,因为它将控制您需要如何反序列化。

我假设您有一个患者详细信息对象列表,这些对象被序列化为data.xml。所以你可能有这样一个类:

public class PatientDetail
{
    public string PatientID { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string Mobile { get; set; }
}

根据您的描述,您的Form2可能是一个模型输入框,当您单击“加载”时会打开该框。您应该在名为PatientID的Form2类上创建一个公共属性。

当用户输入数字并点击恢复时,您可以设置PatientID属性并关闭Form2输入框。回到Form1类,从Form2实例上的PatientID中检索值。当您对数据进行反序列化时,将使用此方法。

同样,假设您已将PatientDetail对象列表序列化为数据,则需要对XML文件进行反序列化并找到所需的实例:

//Deserialise the file
XmlSerializer serialiser = new XmlSerializer(typeof(List<PatientDetail>));
StreamReader reader = new StreamReader("Data.xml");
List<PatientDetail> details = (List<PatientDetail>)serialiser.Deserialize(reader);
reader.Close();

//Find the record which matches the ID retrieved earlier from Form2
PatientDetail detail = details.Where(d => d.PatientID = patientID).First();

现在您拥有反序列化列表中的实例,您将能够填充表单上的文本框。我显然没有在这里进行任何验证(例如检查文件存在),将数据检索与接口逻辑分开是个好主意。例如。存储库类