2010-12-09 51 views
2

所以我的目标是一旦用户点击下拉列表中的项目,单元格将自动调用EndEdit()。最奇怪的是,下面的代码将工作在2nd-n ComboBoxesCells上,我可以从下拉列表中选择数值,但从第一个选择数值。有什么我在这里失踪?DataGridViewComboBoxCell奇怪的问题,试图自动提交更改

 protected override void OnCellClick(DataGridViewCellEventArgs e) 
     { 
      base.OnCellClick(e); 

      DataGridViewComboBoxEditingControl control = this.EditingControl as DataGridViewComboBoxEditingControl; 
      if (control != null) 
      { 
        control.DropDownClosed += new EventHandler(control_DropDownClosed); 
      } 
     } 

      void control_DropDownClosed(object sender, EventArgs e) 
      { 
       this.EndEdit(); 
       DataGridViewComboBoxEditingControl control = sender as DataGridViewComboBoxEditingControl; 
       control.DropDownClosed -= new EventHandler(control_DropDownClosed); 
      } 

应该增加在这里,我从DataGridView继承如果这不是明显

回答

1

当类似“最奇怪的是,下面的代码将在我的下拉第二-N ComboBoxesCells工作,从第一个开始选择数值“,这通常是因为事件发生在你需要的东西完成之前。

Seing你的榜样,我要说的是,在第一时间,当你点击,

DataGridViewComboBoxEditingControl control = this.EditingControl as DataGridViewComboBoxEditingControl; 

给你control == null

也许你应该改变事件选择做你的东西从ClickSelectedIndexChangedSelectedValueChanged

希望这会有所帮助,

+0

嗯,我只是挂钩控件的事件处理程序,当它不是null。在第一次尝试时,控件不为null,我可以连接到“control_DropDownClosed”事件。我甚至可以在事件中断点。 在第一次尝试之后,EndEdit()将该值恢复为选择下拉项目之前的值。所有后续调用该函数中的EndEdit()都可以正常工作,所以我非常困惑。 – Tom 2010-12-10 17:15:31