这里我通过序列化将详细信息从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中的数据
注意:它是一个有两种形式的项目
答案 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();
现在您拥有反序列化列表中的实例,您将能够填充表单上的文本框。我显然没有在这里进行任何验证(例如检查文件存在),将数据检索与接口逻辑分开是个好主意。例如。存储库类