解决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查询了
不知道其他大师们,有没有什么见解,可以给菜讲解一下其他解决之道!