39 votos

Deshabilitar la Célula Resaltando en un datagridview

Cómo deshabilitar la Célula Resaltando en un datagridview, Destacando que no debe suceder incluso si hago clic en la celda.

Alguna idea por favor

91voto

Zurahn Puntos 4682

El ForeColor/BackColor parche no estaba funcionando para mí, porque yo había células de diferentes colores. Así que para cualquier persona en el mismo lugar, he encontrado una solución, más afín a la realidad, la desactivación de la capacidad.

Establecer el SelectionChanged evento para llamar a un método que se ejecuta ClearSelection

private void datagridview_SelectionChanged(object sender, EventArgs e)
{
    this.datagridview.ClearSelection();
}

59voto

jheddings Puntos 10510

La única forma que he encontrado para "desactivar" el resaltado es establecer el SelectionBackColor y SelectionForeColor en la DefaultCellStyle de la misma como la BackColor y ForeColor, respectivamente. Usted probablemente podría hacerlo mediante programación en el formulario Load evento, pero también he hecho en el diseñador.

Algo como esto:

Me.DataGridView1.DefaultCellStyle.SelectionBackColor = Me.DataGridView1.DefaultCellStyle.BackColor
Me.DataGridView1.DefaultCellStyle.SelectionForeColor = Me.DataGridView1.DefaultCellStyle.ForeColor

4voto

KCromm Puntos 31

Hizo una rápida websearch para averiguar cómo hacer un datagridview selección no seleccionable & tiene este (página web) de golpe.

Llamar ClearSelection en SelectionChanged puede causar un doble disparo del evento SelectionChanged, como mínimo.

El primer caso es cuando la célula/fila seleccionada y, por supuesto, el evento SelectionChanged es despedido. La segunda cocción es cuando ClearSelection se llama como se hace (y lógicamente!) la selección de la datagridview (otra vez) modificado (sin selección), por lo tanto el disparo de SelectionChanged.

Si usted tiene más código que simplemente ClearSelection pasando, como tal hago, usted desea suprimir este evento hasta después de que el código está hecho. He aquí un ejemplo:

 private void dgvMyControl_SelectionChanged(object sender, EventArgs e)
{
  //suppresss the SelectionChanged event
  this.dgvMyControl.SelectionChanged -= dgvMyControl_SelectionChanged;

  //grab the selectedIndex, if needed, for use in your custom code
  // do your custom code here

  // finally, clear the selection & resume (reenable) the SelectionChanged event 
  this.dgvMyControl.ClearSelection();
  this.dgvMyControl.SelectionChanged += dgvMyControl_SelectionChanged;
}

2voto

LairdPleng Puntos 94

La forma más rápida de hacer esto para controlar las células con diferentes colores, sin necesidad de refire ninguno de los eventos, sería hacer algo como esto:

private void dgvMyControl_SelectionChanged(object sender, EventArgs e)
{
    dgvMyControl.SelectedCells(0).Style.DefaultCellStyle.SelectionBackColor = dgvMyControl.SelectedCells(0).Style.DefaultCellStyle.BackColor

}
Usted tendrá que poner en un iterador si usted permitir selecciones múltiples

(EDIT)

en realidad, esto debe ser hecho en tiempo de los datos de la población. no parece trabajar en la selección cambiado el método. Así que después de rellenar los datos en la tabla, usted necesita para iterar a través de las células y cambiar su fondo seleccionado para que coincida con su fondo normal. Algo como esto (la sintaxis puede ser un poco fuera, me estoy convirtiendo mi código vb):

foreach (datarow r in dgv.rows)
{
  foreach (datacell c in r.cells)
  {
     c.Style.SelectionBackColor = c.Style.BackColor
  }
}

1voto

Data Puntos 58

Cachondeo y esto también funciona, solo quiero cambiar el fondo de la célula de color en la 2ª columna cuando una célula se hace clic en:

        Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick

    Dim row As Integer = DataGridView1.CurrentCellAddress.Y
    Dim column As Integer = DataGridView1.CurrentCellAddress.X

    If column = 1 Then
        Me.DataGridView1.CurrentCell.Selected = False
        DataGridView1.Item(column, row).Style.BackColor = SelectColour()
    End If

End Sub

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X