2008-11-12 40 views
28

Me gustaría utilizar el control DataGridView como una lista con columnas. Algo así como ListView en modo Detalles, pero quiero mantener la flexibilidad de DataGridView.DataGridView: ¿cómo enfocar toda la fila en lugar de una sola celda?

ListView (con detalles vista y FullRowSelect habilitadas) resalta toda la línea y muestra la marca de enfoque alrededor de toda la línea:
selected row in ListView control

DataGridView (con SelectionMode = FullRowSelect) muestra la marca de enfoque solo alrededor de una sola celda:
selected row in DataGridView

¿Alguien sabe de alguna manera (idealmente) fácil de hacer que la selección de la fila DataGridView se vea como la de ListView?
No estoy buscando un comportamiento cambiado del control, solo quiero que se vea igual.
Idealmente, sin ensuciar con los métodos que hacen la pintura real.

Respuesta

40

Ponga este código en el constructor de su formulario o configúrelo en las propiedades de datagridview usando el IDE.

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

continuación, pegue el siguiente suceso en el código del formulario:

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

y funciona! :-)

"DGV" es el DataGridView en cuestión y "forma" es la formaque lo contiene.

Tenga en cuenta que esta mezcla no muestra el rectángulo punteado alrededor de toda la fila. En cambio, elimina los puntos de enfoque por completo.

16

¿Qué tal

SelectionMode == FullRowSelect 

y

ReadOnly == true 

Funciona para mí.

+0

nice sir gracias por ayudar –

Cuestiones relacionadas