从列表框中选择对象并将相关对象显示到另一个列表框

时间:2017-06-27 18:49:56

标签: c# winforms listbox

我有2个班:Doctor和Pacient。它们都有一个名为codeM的字段。由于医生有代码,因此在创建Pacient对象时在codeM字段中编写医生代码时,可以为该医生分配许多患者。 (我的意思是在创建Doctor对象后已经选择了他们的codeM) Doctor和Pacient类中的 private int codeM字段定义。

和2个表格。在Form1中我有一个Doctor对象列表,在Form2中我有一个Pacient对象列表,我在创建它之后转移到Form1。原因如下:

在Form1中,我有一个listBox,在其中我显示了Doctor对象列表。列表如下:List<Doctor> listDoctors = new List<Doctor>(); 我从Form2传递给Form1的Pacient对象列表名为listPacients

我有一个辅助列表框。我希望当我从listBox1中选择Doctor对象时,将该医生的属性codeM与listPacients中的每个患者进行比较,并在哪里匹配,以便在listBox2中显示这些带有codeM的pacients与医生的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


        }

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

提供的代码Ian H仅处理检索部分,如果您想在ListBox上显示患者的姓名,那么您可以这样做:

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

    public override string ToString()
    {
        return Name;
    }

}

使用此功能会将患者姓名显示为ListBox