2017-06-27 66 views
1

我有2個類:Doctor和Pacient。他們都有一個名爲codeM的字段。由於醫生有代碼,因此在創建Pacient對象時,在codeM字段中寫入醫生代碼時,可以將許多患者分配給該醫生。 (我的意思是在創建Doctor對象後已經選擇了他們的代碼M) private int codeM Doctor和Pacient類中的字段定義。從列表框中選擇對象並將相關對象顯示到另一個列表框

和2種形式。在Form1中,我有一個Doctor對象列表,而在Form2中,我創建了一個Pacient對象列表,我在創建它之後將其轉移到Form1。由於以下原因:

在Form1中我有一個列表框,其中顯示醫生對象列表。該列表如下:List<Doctor> listDoctors = new List<Doctor>(); 我從Form2傳遞給Form1的Pacient對象列表名爲listPacients

我有一個輔助列表框。我希望當我從listBox1中選擇一個Doctor對象時,將該醫生的屬性codeM與listPacients中的每個患者進行比較,以及在listBox2中向我顯示這些患者的codeM與醫生的codeM相同的匹配。

我甚至不知道從哪裏開始這件事情,但我對這個listBox1中的代碼,這與醫生

private void listBox1_doctors_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      Doctor currentItem = listBox1_doctors.SelectedItem as Doctor; 

       foreach(Pacient p in listaPacienti2) 
     { 
      if(currentItem.CodM==p.CodM) 
      { 
       listBox2_pacienti.DataSource = new ObservableCollection<Pacient>(p); 
       listBox2_pacienti.DisplayMember = nameof(Doctor.NumeM); 
       listBox2_pacienti.ValueMember = nameof(Doctor.CodM); 
       listBox2_pacienti.SelectedIndex = 0; 
      } 
     } 
      //from this point on i'm stuck. Please tell me how to continue, and how to set dataSource to only show me the desired pacients 


     } 
+0

除非我遺漏了一些東西,一旦您選擇了Doctor,您需要通過調用patientListBox.DataSource = listPatients填充患者列表框。如果沒有更多的信息,你如何得到醫生的病人名單不是我們可以幫助你的。 – hoodaticus

回答

0

這似乎並不難,我評論我的代碼,這樣你就可以明白它。

private Form2 patientsForm; // You somehow have to get the object of this window, for 
          // example when showing the window with 
          // patientsForm = new Form2().Show(); 

private void listBox1_doctors_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Doctor currentItem = listBox1_doctors.SelectedItem as Doctor; 

    int docCode = currentItem.codeM; 

    // Basically use Linq to select the first Patient in a list of Patients that matches 
    // the codeM of the doctor. 
    Patient patient = patientsForm.listPatients.First(p => p.codeM == docCode); 
} 

編輯:

如果你想獲得多個患者匹配的代碼,只需使用.Where()代替.First()

Patient[] patients = patientsForm.listPatients.Where(p => p.codeM == docCode).ToArray(); 
+0

我寫了這3行,它在listbox2中沒有任何東西。如果我嘗試將這些行放在裏面,它也不會顯示任何內容。 – Arya1209

+0

這段代碼本身「顯示」什麼都沒有。它只是從列表中檢索患者。顯示取決於你。或者在運行時遇到異常? –

+0

它告訴我「InvalidArgument:」0「的值對Selectedindex無效參數名稱= SelectedIndex」0是我分配給醫生和2位患者的代碼之一。這是當我添加dataSource等4,我在示例代碼中提到的行,它不顯示醫生的名稱,但他們的代碼... – Arya1209

0

唯一提供的代碼Ian H處理檢索一部分,如果你想在ListBox顯示病人的姓名,那麼你可以做這樣的:

public class Patient 
{ 
    public string Name{ get; set; } 
    //Other properties 

    public override string ToString() 
    { 
     return Name; 
    } 

} 

使用這將顯示患者姓名到ListBox

+0

非常感謝! – Arya1209

+0

很高興幫助,如果這是你正在尋找的答案,請將此標記爲答案,謝謝! – Dan

相關問題