重开一贴,再问combobox的BUG问题
SWJGComboBox.DataBindings.Add(new System.Windows.Forms.Binding( "SelectedValue ", this.sb_zsxxBindingSource, "nsr_swjg_dm ", true));
this.dM_SWJGComboBox.DataSource = this.dM_SWJGBindingSource;
this.dM_SWJGComboBox.DisplayMember = "SWJG_JC ";
this.dM_SWJGComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.dM_SWJGComboBox.ValueMember = "SWJG_DM ";
private void dM_SWJGComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
this.dataSet1.sb_zsxx.Rows[BindingSource1.Position][ "SWJG_MC "] = dM_SWJGComboBox.Text;
}
以上为代码,奇怪的是下拉列表选择项的时候,经常随机出现无法选择项目的问题,我认为这是这个控件的一个BUG。查了很多资料,都没有解决。特再发一贴,请高人指点这个错误的原因是什么,应当怎么样解决。
而去掉this.dataSet1.sb_zsxx.Rows[BindingSource1.Position][ "SWJG_MC "] = dM_SWJGComboBox.Text;
这句下拉列表就能正常显示。
怀疑一个原因是:当SelectedIndexChanged事件发生时,数据源要与combobox中的选择项同步,而这时如果再更新同一数据源的内容,系统就会造成一个定位的错误。
------解决方案--------------------是bug吗?
------解决方案--------------------基本上
private void dM_SWJGComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
this.dataSet1.sb_zsxx.Rows[BindingSource1.Position][ "SWJG_MC "] = dM_SWJGComboBox.Text;
}
加上这段代码是没意义的,本身sb_zsxxBindingSource已默认跟下拉项同步
而无法选择项目的原因是
this.dM_SWJGComboBox.DisplayMember = "SWJG_JC ";
this.dM_SWJGComboBox.ValueMember = "SWJG_DM ";
"SWJG_DM "与 "SWJG_JC "是不同的数据类型,它默认DisplayMember的数据项也就是 "SWJG_JC "
当 "SWJG_DM "与 "SWJG_JC "是不同的数据类型时拒绝选择
------解决方案--------------------按照你的描述:下拉列表选择项的时候
可能是你的代码
this.dataSet1.sb_zsxx.Rows[BindingSource1.Position][ "SWJG_MC "] = dM_SWJGComboBox.Text;
执行了两次 个人以为你先弄个计数器试试,测试一下是否执行了两次
SelectedIndexChanged 在一个被选择的项不被选择的时候触发一次
然后再另一个项被选中的时候触发一次 (个人理解是这样,没试过所以不确定)
------解决方案--------------------当SelectedIndexChanged事件发生时,数据源要与combobox中的选择项同步,而这时如果再更新同一数据源的内容,系统就会造成一个定位的错误。
你可以重新绑定数据源
------解决方案--------------------微软没这么吧!
------解决方案--------------------纠正一下
是dM_SWJGBindingSource默认跟下拉项同步
无法选择项目的原因是
SWJGComboBox.DataBindings.Add(new System.Windows.Forms.Binding( "SelectedValue ", this.sb_zsxxBindingSource, "nsr_swjg_dm ", true));
this.dM_SWJGComboBox.DataSource = this.dM_SWJGBindingSource;
this.dM_SWJGComboBox.DisplayMember = "SWJG_JC ";
this.dM_SWJGComboBox.ValueMember = "SWJG_DM ";
选择下拉项dM_SWJGComboBox只认DisplayMember
因为DataBindings的 "nsr_swjg_dm "列与dM_SWJGBindingSource的 "SWJG_JC "列是不同的数据类型 所以程序拒绝选择下拉
------解决方案--------------------this.dataSet1.sb_zsxx.Rows[BindingSource1.Position][ "SWJG_MC "] = dM_SWJGComboBox.Text;
顺便问一下这句的意义在哪 ?BindingSource1指哪个?
------解决方案--------------------请问楼主是?dm??