DataGridView: how to focus the whole row instead of a single cell?

Tomas Sedovic picture Tomas Sedovic · Nov 13, 2008 · Viewed 51.2k times · Source

I'd like to use the DataGridView control as a list with columns. Sort of like ListView in Details mode but I want to keep the DataGridView flexibility.

ListView (with Details view and FullRowSelect enabled) highlights the whole line and shows the focus mark around the whole line:
selected row in ListView control

DataGridView (with SelectionMode = FullRowSelect) displays focus mark only around a single cell:
selected row in DataGridView

So, does anyone know of some (ideally) easy way to make the DataGridView row selection look like the ListView one?
I'm not looking for a changed behaviour of the control - I only want it to look the same.
Ideally, without messing up with the methods that do the actual painting.

Answer

Tomas Sedovic picture Tomas Sedovic · Dec 1, 2008

Put this code either into your form's constructor or set it in datagridview's Properties using the IDE.

dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.MultiSelect = false;
dgv.RowPrePaint +=new DataGridViewRowPrePaintEventHandler(dgv_RowPrePaint);

Then paste the following event into the form code:

private void dgv_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
    e.PaintParts &= ~DataGridViewPaintParts.Focus;
}

And it works! :-)

"dgv" is the DataGridView in question and "form" is the Form that contains it.

Note, that this soulution doesn't display the dotted rectangle around the whole row. Instead, it removes the focus dots entirely.