解决WinForm中ComboBox控件的“设置"DataSourse”属性后无法修改项集合”以及两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题

      最近在做一个Winform计算机考试系统的时候,在使用ComboBox遇到一些小问题,然后记录下来,以此证明菜鸟我的进步。

      1,当两个ComboBox或者多个同时使用,利用改变索引项的事件来实现多级菜单,出现“设置DataSourse属性后无法修改集合”的问题。上网搜了一下,然后也进行程序调试,才知道是ComboBox的绑定事件和改变索引项事件发生了冲突。在网上搜了一下答案,也对程序单步进行调试了。感觉确实有些注意的地方,  首先我们要知道ComboBox的事件顺序。ComboBox控件是先进行DataSourse数据绑定事件,然后在进行改变索引项事件,这点大多数人可能看到会笑,但是我就栽在这个问题上了,总以为绑定完后,只有人工用鼠标点击改变ComboBox的索引项才会触发改变索引项事件,所以把这个点出来。以提醒自己。

问题描述:有A,B两个ComboBox控件,我们想实现点击A的下拉选项后,B可以根据A的选项显示对应的项。这个在窗口第一次加载的时候不会出现问题,然而当我们在加载完后,再去选择A的下拉选项后,就会出现该问题。

解决问题:第一次加载不会出现问题是因为第一次时,B是初次绑定数据源,然后第二次触发该事件的时候,B已经有一个数据源。所以我们要做的很简单:在B的绑定方法中,在清除项之前,让他的数据源为空。就可以了。

 //绑定comb_trainexam1
        private void SetComb_TrainExam1()
        {
            

if (this.comb_trainexam1.Items.Count > 0) { this.comb_trainexam1.DataSource = null; this.comb_trainexam1.Items.Clear(); }

            DataSet ds = qpt.GetTrainExamInfo();
            if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)            
            {                
                this.comb_trainexam1.DataSource = ds.Tables[0];//也可以用dt                                  
                this.comb_trainexam1.SelectedIndex = 0;   
            }              
            else               
            {
                MessageBox.Show("提示信息内容", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);          
                return;              
            }    
        }

   2,有时候我们会用到两个ComboBox或者多个,这两个或多个ComboBox之间没有关系。然后也想用它们的改变索引项事件,以此作为条件来改变数据列表显示信息,而他们直接不相互干涉。可是经过多次的尝试,你就会放弃了。还是回到一开始我提出的问题。ComboBox的空间在绑定后紧接着就会发生,所以当第一个绑定后就立刻进行进行改变索引项事件,然而此时其它控件还没有加载,没有任何值,所以实现不了。

问题描述:有A,B两个ComboBox控件,他们直接的没有任何关系,我们实现随意改变一个A或者B的控件的下拉选项,然后数据列表可以根据他们两个的选项来进行改变数据显示。

所以两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题,为此我们只能再加个Button按钮,然后将A,B的索引项改变后,根据他们的条件进行一次Select查询了

不知道其他大师们,有没有什么见解,可以给菜讲解一下其他解决之道!

posted on 2011-12-30 20:31  清风拂过  阅读(1334)  评论(0编辑  收藏  举报