Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 814
Tomas Sedovic Avatar asked Nov 12 '08 23:11

Tomas Sedovic


2 Answers

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.

like image 62
Tomas Sedovic Avatar answered Oct 02 '22 15:10

Tomas Sedovic


How about

SelectionMode == FullRowSelect 

and

ReadOnly == true 

It works for me.

like image 31
L.E. Avatar answered Oct 02 '22 16:10

L.E.