Event that fires during DataGridViewComboBoxColumn SelectedIndexChanged

后端 未结 3 1204
暗喜
暗喜 2020-12-01 14:17

I have DataGridView with two columns. The first column is TextBoxCol(DataGridViewTextBoxColumn) and the Second one is ComboBoxCol(DataGridVie

3条回答
  •  醉酒成梦
    2020-12-01 14:43

    That link is correct. Handle the EditingControlShowing event of DataGridView. In this event handler, check if the current column is of your interest. And, then create a temporary combobox object :-

    ComboBox comboBox = e.Control as ComboBox;

    MSDN has a sample: See in the example section here. Note the Inheritance Hierarchy & Class Syntax in the msdn link : -

    public class DataGridViewComboBoxEditingControl : ComboBox, IDataGridViewEditingControl

    private DataGridView dataGridView1 = new DataGridView();
    
    private void AddColorColumn()
    {
        DataGridViewComboBoxColumn comboBoxColumn =
            new DataGridViewComboBoxColumn();
        comboBoxColumn.Items.AddRange(
            Color.Red, Color.Yellow, Color.Green, Color.Blue);
        comboBoxColumn.ValueType = typeof(Color);
        dataGridView1.Columns.Add(comboBoxColumn);
        dataGridView1.EditingControlShowing +=
            new DataGridViewEditingControlShowingEventHandler(
            dataGridView1_EditingControlShowing);
    }
    
    private void dataGridView1_EditingControlShowing(object sender,
        DataGridViewEditingControlShowingEventArgs e)
    {
        ComboBox combo = e.Control as ComboBox;
        if (combo != null)
        {
            // Remove an existing event-handler, if present, to avoid 
            // adding multiple handlers when the editing control is reused.
            combo.SelectedIndexChanged -=
                new EventHandler(ComboBox_SelectedIndexChanged);
    
            // Add the event handler. 
            combo.SelectedIndexChanged +=
                new EventHandler(ComboBox_SelectedIndexChanged);
        }
    }
    
    private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        ((ComboBox)sender).BackColor = (Color)((ComboBox)sender).SelectedItem;
    }
    

提交回复
热议问题