ultima toda selectedrows seleccionar seleccionada obtener numero net leer filas fila evento ejemplos celda winforms datagridview selection row

winforms - toda - Fila de DataGridView: selección semitransparente o borde de fila en la selección



seleccionar ultima fila datagridview vb net (1)

Si desea dibujar un borde alrededor de las filas seleccionadas, puede usar DataGridView.RowPostPaintEvent , y para ''borrar'' los colores de selección, puede usar las propiedades DataGridViewCellStyle.SelectionBackColor y DataGridViewCellStyle.SelectionForeColor .

Por ejemplo, si configuro el estilo de celda de fila como este

row.DefaultCellStyle.BackColor = Color.LightBlue; row.DefaultCellStyle.SelectionBackColor = Color.LightBlue; row.DefaultCellStyle.SelectionForeColor = dataGridView1.ForeColor;

Puedo agregar este código al RowPostPaintEvent

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { if (dataGridView1.Rows[e.RowIndex].Selected) { using (Pen pen = new Pen(Color.Red)) { int penWidth = 2; pen.Width = penWidth; int x = e.RowBounds.Left + (penWidth / 2); int y = e.RowBounds.Top + (penWidth / 2); int width = e.RowBounds.Width - penWidth; int height = e.RowBounds.Height - penWidth; e.Graphics.DrawRectangle(pen, x, y, width, height); } } }

y una fila seleccionada se mostrará así:

Tengo un DataGridView donde el fondo de cada fila es diferente dependiendo del elemento vinculado a los datos. Sin embargo, cuando selecciono una fila, ya no puedo ver su color de fondo original.

Para resolver esto, he pensado en dos soluciones:

Puedo hacer las selecciones semitransparentes, lo que permite ver si dos filas seleccionadas tienen diferentes colores de fondo.

O; Puedo eliminar completamente los colores de selección y dibujar un borde alrededor de las filas seleccionadas.

¿Qué opción es más fácil y cómo puedo hacer esto?

Es una aplicación WinForm.

Editar: terminé usando parte de tu código, a la deriva

private void dgv_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) { if (dgv.Rows[e.RowIndex].Selected) { var row = dgv.Rows[e.RowIndex]; var bgColor = row.DefaultCellStyle.BackColor; row.DefaultCellStyle.SelectionBackColor = Color.FromArgb(bgColor.R * 5 / 6, bgColor.G * 5 / 6, bgColor.B * 5 / 6); } }

Esto da la impresión de un color de selección semitransparente. ¡Gracias por tu ayuda!