valor validacion una teclado sombrear segun para introducir funcion despues datos condiciones condicional condicion con como color celdas celda bloquear .net vb.net winforms datagridview

.net - validacion - condicional para bloquear celdas



Deshabilitar celdas resaltadas en una vista de cuadrĂ­cula de datos (8)

Cómo desactivar resaltado de celda en una vista de cuadrícula de datos, resaltar no debería suceder incluso si hago clic en la celda.

Cualquier pensamiento por favor


Dando vueltas y esto también funciona, ya que solo quiero cambiar el color de fondo de la celda en la segunda columna cuando se hace clic en una celda:

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


ForeColor / BackColor kludge no funcionaba para mí, porque tenía células de diferentes colores. Entonces, para cualquiera en el mismo lugar, encontré una solución más parecida a la desactivación de la habilidad.

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

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


Hice una búsqueda web rápida para descubrir cómo hacer que una selección de vista de cuadrícula de datos no sea seleccionable y obtuve esta (página web) presionada.

Llamar a ClearSelection en SelectionChanged puede causar y provoca una doble activación del evento SelectionChanged, como mínimo.

El primer evento es cuando se selecciona la celda / fila y, por supuesto, se dispara el evento SelectionChanged. El segundo disparo es cuando ClearSelection se llama ya que provoca (y lógicamente así) la selección de la vista de tabla de datos a (nuevamente) cambiado (a ninguna selección), disparando SelectionChanged.

Si tiene más código que simplemente ClearSelection, como hago yo, querrá suprimir este evento hasta que haya terminado su código. Aquí hay 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; }


en vb hablar:

Private Sub datagridview1_SelectionChanged(sender As Object, e As EventArgs) Handles datagridview1.SelectionChanged datagridview1.ClearSelection() End Sub


La única forma que he encontrado para "deshabilitar" el resaltado es establecer SelectionBackColor y SelectionForeColor en DefaultCellStyle al igual que BackColor y ForeColor , respectivamente. Probablemente pueda hacer esto programáticamente en el evento Load del formulario, pero también lo 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


La forma más rápida de hacer esto para manejar celdas con diferentes colores, sin necesidad de refinar ningún evento, 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 } Deberá ingresar un iterador si permite múltiples selecciones

(EDITAR)

en realidad, esto debe hacerse al momento para la población de datos. no parece funcionar en el método de cambio de selección activada. Por lo tanto, después de completar los datos en la tabla, debe recorrer las celdas y cambiar el fondo seleccionado para que coincida con su fondo normal. Algo como esto (la sintaxis puede estar un poco desajustada, la estoy convirtiendo de mi código vb):

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


Private Sub DGW2_DataBindingComplete(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles DGW2.DataBindingComplete Dim mygrid As DataGridView mygrid = CType(sender, DataGridView) mygrid.ClearSelection() End Sub


Private Sub DataGridView1_SelectionChanged(sender As Object, e As System.EventArgs) Handles DataGridView1.SelectionChanged Me.DataGridView1.ClearSelection() End Sub

Eso es. Pero si aún desea hacer clic en el índice de fila / celda o para acceder a los valores:

Private Sub DataGridView1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown Dim _ht As DataGridView.HitTestInfo = Me.DataGridView1.HitTest(e.X, e.Y) If _ht.Type = DataGridViewHitTestType.Cell Then Me.DataGridView1.Rows(_ht.RowIndex).Cells(_ht.ColumnIndex).Value = _ "RowIndex = " & _ht.RowIndex & ", " & "ColumnIndex = " & _ht.ColumnIndex End If End Sub