我有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
}
答案 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
。