DataGridView prohíbe que se seleccione una fila (evento de cambio de estado de fila) C #

Datagridview Prohibits Row Be Selected C

Hoy encontré el requisito de que algunas filas en la tabla winform (DataGridView) no deben seleccionarse. Como se muestra en la figura siguiente, todas las filas se pueden seleccionar de forma predeterminada.







Las filas de la tabla se pueden seleccionar mediante una variedad de métodos, por ejemplo: haga clic en una fila para seleccionar, use ctrl, shift y otras teclas de acceso directo para seleccionar, y haga clic en la esquina superior izquierda para seleccionar todo.



La solución es hacerlo a través del evento del control. De acuerdo con el sentido común, seleccionar o deseleccionar una fila definitivamente desencadenará un evento seleccionado o no seleccionado. En teoría, puede establecer el atributo seleccionado como falso en este evento.

Pero para estas filas cargadas dinámicamente, ¿cómo definir el evento seleccionado?

La respuesta es que no puede operar directamente en una fila, pero debe hacerlo a través de toda la tabla, es decir, definir el evento de DataGridView.



Ideas:

Agregue un método de procesamiento al evento RowStateChanged de la tabla. Se mide que mientras una fila cambie (mostrar, ocultar, seleccionar, deseleccionar, etc.), el evento se activará una vez. Como se muestra en la figura siguiente, cuando se carga la tabla, el evento se activa tantas veces como filas haya.



Con el evento RowStateChange, también debemos cooperar con el controlador de eventos DataGridViewRowStateChangedEventHandler, que viene con el parámetro DataGridViewRowStateChangedEventArgs, que contiene una referencia a una fila.


No hay mucha tontería, el código:

|_+_|

¡problema resuelto!


Suplemento sobre el evento RowStateChange:

Suponga que la fila A está seleccionada actualmente y que se hace clic en la fila B en este momento. Lo que vemos es que la fila A no está marcada y la fila B está seleccionada. En realidad, el evento RowStateChange se activa dos veces, es decir, la pérdida de la línea A y la selección de la línea B.