2012-07-04 117 views
40

Quiero usar mi DataGridView sólo para mostrar las cosas, y quiero que el usuario no sea capaz de seleccionar cualquier fila, campo o nada de la DataGridView.Cómo deshabilitar la capacidad de seleccionar en un DataGridView?

¿Cómo puedo hacer esto?

+1

no ser capaz de seleccionar es muy mal diseño de la interfaz de usuario (muy molesto para el usuario). ¿Qué sucede si el usuario quiere copiar algo de su informe? Creo que solo leer será suficiente (como se describe en las respuestas a continuación). – banging

Respuesta

1

Uso del DataGridView.ReadOnly property

El código en el MSDN example ilustra el uso de esta propiedad en un control DataGridViewdestinado principalmente para la visualización. En este ejemplo, el aspecto visual del control es personalizado de varias maneras y el control está configurado para la interactividad limitada.

observar estos ajustes en el código de ejemplo:

// Set property values appropriate for read-only 
// display and limited interactivity 
dataGridView1.AllowUserToAddRows = false; 
dataGridView1.AllowUserToDeleteRows = false; 
dataGridView1.AllowUserToOrderColumns = true; 
dataGridView1.ReadOnly = true; 
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 
dataGridView1.MultiSelect = false; 
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; 
dataGridView1.AllowUserToResizeColumns = false; 
dataGridView1.ColumnHeadersHeightSizeMode = 
DataGridViewColumnHeadersHeightSizeMode.DisableResizing; 
dataGridView1.AllowUserToResizeRows = false; 
dataGridView1.RowHeadersWidthSizeMode = 
DataGridViewRowHeadersWidthSizeMode.DisableResizing; 
+2

Si pudiera votar, lo haría. No hay suficiente representante todavía. Sin embargo, Readonly no hace nada para evitar que un usuario seleccione una celda. – JSON

+0

@JSON - No importa votar hacia arriba o hacia abajo. Sería genial tener una solución en lugar de donde la comunidad pueda aprender. –

2

que fija esta estableciendo la propiedad Enabled-false.

+5

no comprobado todavía, pero supongo que perderá algunos efectos visuales si deshabilita una vista de cuadrícula de datos. –

+0

Para estar seguro, pero como @MahdiTahsildari dijo que obtendrás una interfaz atenuada. – C4u

+0

Aviso: Entonces tampoco tiene los eventos como DoubleClick disponible – SenioreT

91

Me quedo con esto:

private void myDataGridView_SelectionChanged(Object sender, EventArgs e) 
{ 
    dgvSomeDataGridView.ClearSelection(); 
} 

No estoy de acuerdo con la afirmación de que hay un amplio DataGridView debe ser seleccionable. Algunas IU están diseñadas para herramientas o dispositivos táctiles, y permitir una selección lleva al usuario a pensar erróneamente que la selección realmente los llevará a alguna parte.

Configuración ReadOnly = true en el control no tiene ningún impacto sobre si una celda o fila se pueden seleccionar. Y hay desventajas visuales y funcionales en la configuración Enabled = false.

Otra opción es establecer el control de los colores seleccionados para que sean exactamente lo que son los colores no seleccionados, pero si está manipulando el color de la celda, este método produce algunos resultados desagradables también.

+0

Pregunta "¿Cómo cambio la cuadrícula de datos para ver el color de fondo de la fila seleccionada?" describe cómo establecer el fondo y el color de primer plano para la fila seleccionada: Question
Esto funcionó lo suficientemente bien para mí. – user1036944

+0

Hmm .. Me pregunto si todas las respuestas del código VB.NET están editadas en C# .... – edhubbell

+0

Esta es mejor :) –

1

me encontré con el establecimiento de todas las propiedades AllowUser... a false, ReadOnly a true, RowHeadersVisible a false, ScollBars a None, a continuación, faking the prevention of selection funcionaron mejor para mí. No establecer Enabled a false todavía permite al usuario copiar los datos de la red.

El siguiente código también limpia la mirada cuando se desea un simple cuadrícula de pantalla (filas suponiendo que tienen la misma altura):

int width = 0; 
for (int i = 0; i < dataGridView1.Columns.Count; i++) 
{ 
    width += dataGridView1.Columns[i].Width; 
} 

dataGridView1.Width = width; 
dataGridView1.Height = dataGridView1.Rows[0].Height*(dataGridView1.Rows.Count+1); 
9

puede establecer un color de fondo transparente para las celdas seleccionadas de la siguiente manera:

DataGridView.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.Transparent; 
1

Esto funcionó para mí como un encanto:

row.DataGridView.Enabled = false; 

row.DefaultCellStyle.BackColor = Color.LightGray; 

row.DefaultCellStyle.ForeColor = Color.DarkGray; 

(donde fila = DataGridView.NewRow (sobrecargas apropiadas);)

1

Enabled propiedad a false

o

this.dataGridView1.DefaultCellStyle.SelectionBackColor = this.dataGridView1.DefaultCellStyle.BackColor; 
this.dataGridView1.DefaultCellStyle.SelectionForeColor = this.dataGridView1.DefaultCellStyle.ForeColor; 
Cuestiones relacionadas