我在C#Windows窗体应用程序中有2个Checkedlistbox
控件。首先Checkedlistbox
用于医生的专科,例如牙医,放射线医生等。如果选中“牙医”复选框,则医生的专科Checkedlistbox
控件将显示在医生的名称Checkedlistbox
控件中。问题是,当我检查牙医Checkedlistbox
,然后再检查医生Checkedlistbox
的一些牙医时,如果我检查放射科医生Checkedlistbox
,则医生的姓名Checkedlistbox
将被重设,并且我所有牙医检查的复选框都将被取消选择。我尝试过的医生的名字Checkedlistbox
数据源:
DoctorsIDCheckedlistbox.DataSource = _ClinicEntities.Tbl_Doctors
.Where(w => _SelectedSpecialty.Contains(w.SpecialtyID))
.Select(s => new DoctorListCheckbox{ Name = s.Name + " " + s.LastName, DoctorID = s.DoctorID })
.ToList();
DoctorsIDCheckedlistbox.DisplayMember = "Name";
DoctorsIDCheckedlistbox.ValueMember = "DoctorID";
然后我将选中的项目保存在ItemCheck
事件中:
private void DoctorsID_ItemCheck(object sender, ItemCheckEventArgs e)
{
int doctorID = Convert.ToInt32(DoctorsIDCheckedlistbox.SelectedValue);
if (e.NewValue == CheckState.Checked)
{
_SelectedDoctorsChecked.Add(doctorID.ToString());
}
else
{
_SelectedDoctorsChecked.Remove(doctorID.ToString());
}
}
然后参加医生专业ItemCheck
活动:
private void SpecialtyTypeID_ItemCheck(object sender, ItemCheckEventArgs e)
{
for (int i = 0; i < DoctorsIDCheckedlistbox.Items.Count; i++)
{
if (_SelectedDoctorsChecked.Contains(DoctorsIDCheckedlistbox.Items[i].ToString()))
{
try
{
DoctorsIDCheckedlistbox.SetItemChecked(i, true);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
[我希望上面的代码通过_SelectedDoctorsChecked
列表查找被选择的医生,并在医生的专业复选框状态更改时对其进行检查。但这不起作用。
示例:我在医生的专长中选中A,并且项目1、2和3将显示在医生的名字中。我检查1和3。当我在医生专业中检查B时,将显示A中的项目1、2和3和B中的4、5和6。我希望检查1号和3号。但是不会。
编辑:我的Checkedlistbox
控制数据源:
DoctorsIDCheckedlistbox.DataSource = _ClinicEntities.Tbl_Doctors
.Where(w => _SelectedSpecialty.Contains(w.SpecialtyID))
.Select(s => new DoctorListCheckbox{ Name = s.Name + " " + s.LastName, DoctorID = s.DoctorID })
.ToList();
DoctorsIDCheckedlistbox.DisplayMember = "Name";
DoctorsIDCheckedlistbox.ValueMember = "DoctorID";
和DoctorListCheckbox
类:
public partial class DoctorListCheckbox
{
public int DoctorID { get; set; }
public string Name { get; set; }
public CheckState CheckState { get; set; }
public override string ToString()
{
return Name;
}
}
我基于Microsoft Example做到了
基本知识与我在Updates in the DataSource reset CheckedListBox checkboxes中所解释的相同。