ComboBox二级联动时,发现一个问题。如下
cboWard绑定完后,会自动触发一遍SelectedIndexChanged事件,此时cboWard.SelectedValue是
注意:
var wardList = (from ward in alarmInfoList
select new
{
ward.AlarmJQ,
ward.AlarmJQName
}).Distinct();
List<WardInfo> wiList = new List<WardInfo>();
foreach (var ward in wardList)
{
WardInfo wi = new WardInfo();
wi.AlarmJQ = ward.AlarmJQ;
wi.AlarmJQName = ward.AlarmJQName;
wiList.Add(wi);
}
cboWard.DataSource = wiList;
cboWard.ValueMember = "AlarmJQ";
cboWard.DisplayMember = "AlarmJQName";
private void cboWard_SelectedIndexChanged(object sender, EventArgs e)
{
var departmentList = (from department in alarmInfoList
where department.AlarmJQ == cboWard.SelectedValue.ToString()
select new
{
department.AlarmArea,
department.AlarmAreaName
}).Distinct();
List<DepartmentInfo> diList = new List<DepartmentInfo>();
DepartmentInfo diAll = new DepartmentInfo();
diAll.AlarmArea = -1;
diAll.AlarmAreaName = "全部";
diList.Add(diAll);
foreach (var department in departmentList)
{
DepartmentInfo di = new DepartmentInfo();
di.AlarmArea = department.AlarmArea;
di.AlarmAreaName = department.AlarmAreaName;
diList.Add(di);
}
cboDepartment.DataSource = diList;
cboDepartment.DisplayMember = "AlarmAreaName";
cboDepartment.ValueMember = "AlarmArea";
}
cboWard绑定完后,会自动触发一遍SelectedIndexChanged事件,此时cboWard.SelectedValue是
List<WardInfo> wiList = new List<WardInfo>();
里面的WardInfo对象,而不是想要的
cboWard.ValueMember = "AlarmJQ";
value值,导致cboDepartment没有数据。
解决方式:
List<WardInfo> wiList = new List<WardInfo>();
foreach (var ward in wardList)
{
WardInfo wi = new WardInfo();
wi.AlarmJQ = ward.AlarmJQ;
wi.AlarmJQName = ward.AlarmJQName;
wiList.Add(wi);
}
//去除委托
cboWard.SelectedIndexChanged -= new EventHandler(cboWard_SelectedIndexChanged);
cboWard.DataSource = wiList;
cboWard.ValueMember = "AlarmJQ";
cboWard.SelectedIndexChanged += new EventHandler(cboWard_SelectedIndexChanged);
cboWard.DisplayMember = "AlarmJQName";
注意:
cboWard.SelectedIndexChanged += new EventHandler(cboWard_SelectedIndexChanged);
cboWard.DisplayMember = "AlarmJQName";
DisplayMember一定要放到增加委托后面,否则联动失败。
如有什么问题,或者更好的方式,希望大家指正!