0

ここに画像の説明を入力 ここに画像の説明を入力
ここでは、シリアル化して form1 から data.xml に詳細を保存しています。

ここで、フォーム 2 で患者 ID を検索して詳細を取得し、フォーム 2 の [復元] ボタンをクリックしたときにフォーム 1 のテキスト ボックスに復元します。

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 の ma プロジェクトを知りません。学習を手伝ってください。ここで私の質問は、form2 で患者 ID を検索し、form1 に表示して、PatientD.xml からデータを復元したいということです。

注: 2 つのフォームを持つ 1 つのプロジェクト

4

1 に答える 1

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 はおそらく [読み込み] をクリックすると開くモデル入力ボックスです。Form2 クラスに、PatientID というパブリック プロパティを作成する必要があります。

ユーザーが数字を入力して復元を押すと、PatientID プロパティを設定して Form2 入力ボックスを閉じることができます。Form1 クラスに戻り、Form2 インスタンスの PatientID から値を取得します。これは、データをデシリアライズしたときに使用されます。

ここでも、PatientDetail オブジェクトの List をデータとしてシリアル化したと仮定すると、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();

これで、逆シリアル化されたリストからインスタンスが取得され、フォームのテキスト ボックスに入力できるようになります。ここでは明らかに検証を行っていません (たとえば、ファイルの存在を確認するなど)。データの取得をインターフェイス ロジックから分離することをお勧めします。例: リポジトリ クラス

于 2013-02-16T22:54:33.230 に答える