views:

166

answers:

2

Hi, 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?

+2  A: 

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

Stuart Helwig
Will try it, thanks.
IsaacB
Works just as I hoped. Thanks Stuart!
IsaacB
+2  A: 

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.

Zach Johnson
Sooo many datagridviews to change right now, if I come across a case where I have to do this I'll check your solution out!
IsaacB