Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What event catches a change of value in a combobox in a DataGridViewCell?

I want to handle the event when a value is changed in a ComboBox in a DataGridView cell.

There's the CellValueChanged event, but that one doesn't fire until I click somewhere else inside the DataGridView.

A simple ComboBox SelectedValueChanged does fire immediately after a new value is selected.

How can I add a listener to the combobox that's inside the cell?

like image 948
yurib Avatar asked Apr 13 '11 17:04

yurib


1 Answers

The above answer led me down the primrose path for awhile. It does not work as it causes multiple events to fire and just keeps adding events. The problem is that the above catches the DataGridViewEditingControlShowingEvent and it does not catch the value changed. So it will fire every time you focus then leave the combobox whether it has changed or not.

The last answer about CurrentCellDirtyStateChanged is the right way to go. I hope this helps someone avoid going down a rabbit hole.

Here is some code:

// Add the events to listen for dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged); dataGridView1.CurrentCellDirtyStateChanged += new EventHandler(dataGridView1_CurrentCellDirtyStateChanged);    // This event handler manually raises the CellValueChanged event  // by calling the CommitEdit method.  void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e) {     if (dataGridView1.IsCurrentCellDirty)     {         // This fires the cell value changed handler below         dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);     } }  private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) {     // My combobox column is the second one so I hard coded a 1, flavor to taste     DataGridViewComboBoxCell cb = (DataGridViewComboBoxCell)dataGridView1.Rows[e.RowIndex].Cells[1];     if (cb.Value != null)     {          // do stuff          dataGridView1.Invalidate();     } } 
like image 121
Severun Avatar answered Sep 19 '22 15:09

Severun