2010-03-16 98 views
7

Estoy usando un DGV para mostrar una lista de imágenes con leyendas de texto como lista de selección. Su debe siempre ser una única selección hecha en la lista. No puedo encontrar una manera de evitar que el usuario borre la selección con un clic de control en la fila seleccionada.DataGridView que siempre tiene una fila seleccionada

¿Hay alguna propiedad en el diseñador que me falta que pueda hacer esto?

Si tengo que anular el comportamiento en los eventos de clic del mouse, ¿hay otras formas en las que el usuario podría borrar la selección actual que también necesita cobertura?

¿Hay un tercer enfoque que podría tomar que sea menos engorroso que mi segunda idea?

+0

¿Por qué el usuario siempre necesidad de mantener un elemento seleccionado? ¿Qué tipo de funcionalidad permite? –

+0

La misma razón por la que siempre necesita tener un botón de opción seleccionado. Estoy usando un DGV porque el número total de opciones es lo suficientemente grande como para ser incómodo sin desplazarse (20 opciones x 20 píxeles de imágenes de altura). –

Respuesta

2

La manera más fácil es detectar el evento SelectionChanged y comprobar si el usuario ha deseleccionado todas las filas. Si es así, vuelva a seleccionar la fila seleccionada previamente. Básicamente, estás interceptando su acción y volviendo a seleccionar la selección. Algo como esto (código no probado, pero obtendrá la idea):

DataGridViewRow last_selected_row; 
    private void dgv_SelectionChanged(object sender, EventArgs e) 
    { 
      if (dgv.SelectedRows.Count == 0) 
        last_selected_row.Selected = true; 
      else 
        last_selected_row = dgv.SelectedRows[0]; 
    } 

Dependiendo de la aplicación, tal vez sería mejor para almacenar el índice de la fila en lugar de una referencia a la misma fila. También asegúrese de inicializar last_selected_row y actualizarlo si elimina cualquier fila.

Cualquier otro control que enganche el evento SelectionChanged tendrá que manejar de forma segura el caso de que no se seleccionen filas, en caso de que se activen antes del evento que lo vuelva a conmutar. Sin embargo, pueden regresar inmediatamente, seguros sabiendo que SelectionChanged disparará de nuevo momentáneamente.

También podría crear la subclase DataGridView y anular el método OnSelectionChanged. Luego puede volver a seleccionar la última fila seleccionada antes de el evento se dispara (se activará cuando llame al base.OnSelectionChanged).

0

Una DGV tiene una propiedad llamada multiselección, si la configura en falso, solo se puede seleccionar una celda/fila a la vez.

+1

Eso evita seleccionar múltiples filas. La TI no impide que el usuario haga clic en la fila seleccionada para borrar la selección. –

0

Sólo controlar el evento DataBindingComplete del DataGridView como esto:

private void datagridview1_DataBindingComplete(System.Object sender, System.Windows.Forms.DataGridViewBindingCompleteEventArgs e) 

{ 
datagridview1.ClearSelection(); 
} 
+0

Por favor, vuelva a leer mi pregunta. Su solución elimina cualquier selección existente cuando se carga la grilla; no impide que el usuario borre una selección. –

Cuestiones relacionadas