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

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一定要放到增加委托后面,否则联动失败。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值