C# winform ComboBox绑定数据源时触发SelectedIndexChanged事件的处理

来源:互联网 发布:在vb中val是什么意思 编辑:程序博客网 时间:2024/04/30 07:42
ComboBox二级联动时,发现一个问题。如下
  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一定要放到增加委托后面,否则联动失败。

如有什么问题,或者更好的方式,希望大家指正!

0 0
原创粉丝点击