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
Respuestas
¿Demasiados anuncios?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();
}
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
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;
}
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
}
(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
}
}
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