日期:2014-05-19  浏览次数:20757 次

重开一贴,再问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??