解决WinForm中ComboBox控件的“设置"DataSourse”属性后无法修改项集合”以及两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题
2011-12-30 20:31
1131 查看
最近在做一个Winform计算机考试系统的时候,在使用ComboBox遇到一些小问题,然后记录下来,以此证明菜鸟我的进步。
1,当两个ComboBox或者多个同时使用,利用改变索引项的事件来实现多级菜单,出现“设置DataSourse属性后无法修改集合”的问题。上网搜了一下,然后也进行程序调试,才知道是ComboBox的绑定事件和改变索引项事件发生了冲突。在网上搜了一下答案,也对程序单步进行调试了。感觉确实有些注意的地方, 首先我们要知道ComboBox的事件顺序。ComboBox控件是先进行DataSourse数据绑定事件,然后在进行改变索引项事件,这点大多数人可能看到会笑,但是我就栽在这个问题上了,总以为绑定完后,只有人工用鼠标点击改变ComboBox的索引项才会触发改变索引项事件,所以把这个点出来。以提醒自己。
问题描述:有A,B两个ComboBox控件,我们想实现点击A的下拉选项后,B可以根据A的选项显示对应的项。这个在窗口第一次加载的时候不会出现问题,然而当我们在加载完后,再去选择A的下拉选项后,就会出现该问题。
解决问题:第一次加载不会出现问题是因为第一次时,B是初次绑定数据源,然后第二次触发该事件的时候,B已经有一个数据源。所以我们要做的很简单:在B的绑定方法中,在清除项之前,让他的数据源为空。就可以了。
if (this.comb_trainexam1.Items.Count > 0) { this.comb_trainexam1.DataSource = null; this.comb_trainexam1.Items.Clear(); }
2,有时候我们会用到两个ComboBox或者多个,这两个或多个ComboBox之间没有关系。然后也想用它们的改变索引项事件,以此作为条件来改变数据列表显示信息,而他们直接不相互干涉。可是经过多次的尝试,你就会放弃了。还是回到一开始我提出的问题。ComboBox的空间在绑定后紧接着就会发生,所以当第一个绑定后就立刻进行进行改变索引项事件,然而此时其它控件还没有加载,没有任何值,所以实现不了。
问题描述:有A,B两个ComboBox控件,他们直接的没有任何关系,我们实现随意改变一个A或者B的控件的下拉选项,然后数据列表可以根据他们两个的选项来进行改变数据显示。
所以两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题,为此我们只能再加个Button按钮,然后将A,B的索引项改变后,根据他们的条件进行一次Select查询了
不知道其他大师们,有没有什么见解,可以给菜讲解一下其他解决之道!
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查询了
不知道其他大师们,有没有什么见解,可以给菜讲解一下其他解决之道!
相关文章推荐
- C# LIstbox 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题
- ComboBox控件“设置 DataSource 属性后无法修改项集合”的解决
- ComboBox控件“设置 DataSource 属性后无法修改项集合”的解决
- C# ComboBox控件“设置 DataSource 属性后无法修改项集合”的完美解决方法
- 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题
- 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题
- 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”
- WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题解决方案
- ComboBox控件 “设置 DataSource 属性后无法修改项集合”
- 解决"由于不可识别问题,windows无法显示windows防火墙设置"的问题
- winform窗体中 ComboBox 控件的DropDownWidth属性根据显示的文本设置下拉列表的显示宽度
- jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
- IE6的png显示问题以及div无法实现1px高度问题的解决
- (转)RadComboBox 的 Virtualization 方式,解决数据过多,下拉列表显示缓慢问题。
- ListView集合中设置标记 setTag();方法带一个参数和两个参数的区别,以及设置标记时ViewHolder中的每一个属性控件都需要设置一次,否则在Item中每一个控件的点击事件中取出设置的标
- ComboBox插入项(设置 DataSource 属性后无法修改项集合 )
- 设置PopWindow显示在某控件之上和无法获取PopWindow高度问题解决方法
- TextView设置android:ellipsize="marquee"属性,无法实现跑马灯效果的解决方法
- 智能设备下,在ComboBox控件添加了多项数据,只显示第一项数据,而不显示其它数据的问题解决办法