Isaac Bolinger
Isaac Bolinger

Reputation: 7388

Direct access to DataGridView combobox in one click?

I'm getting annoyed with clicking once to select a row in the datagridview, and then clicking again to click on a control in that row (in this case a combobox).

Is there a way configure this thing so that all this can be done in one mouse click instead of two?

Upvotes: 29

Views: 23492

Answers (2)

Zach Johnson
Zach Johnson

Reputation: 24212

If you want to selectively apply the one-click editing to certain columns, you can switch the current cell during the MouseDown event to eliminate the click to edit:

// Subscribe to DataGridView.MouseDown when convenient
this.dataGridView.MouseDown += this.HandleDataGridViewMouseDown;

private void HandleDataGridViewMouseDown(object sender, MouseEventArgs e)
{
    // See where the click is occurring
    DataGridView.HitTestInfo info = this.dataGridView.HitTest(e.X, e.Y);

    if (info.Type == DataGridViewHitTestType.Cell)
    {
        switch (info.ColumnIndex)
        {
            // Add and remove case statements as necessary depending on
            // which columns have ComboBoxes in them.

            case 1: // Column index 1
            case 2: // Column index 2
                this.dataGridView.CurrentCell =
                    this.dataGridView.Rows[info.RowIndex].Cells[info.ColumnIndex];
                break;
            default:
                break;
        }
    }
}

Of course, if your columns and their indexes are dynamic, you would need to modify this a bit.

Upvotes: 3

Stuart Helwig
Stuart Helwig

Reputation: 9454

Change the EditMode property of your DataGridView control to "EditOnEnter". This will affect all columns though.

Upvotes: 54

Related Questions