Principales respuestas
DataGridView solo Lectura

Pregunta
-
Saludos,
Cargo datos a un datatable, luego lo asigno por DATASOURCE a un BindingSource y este finalmente lo paso al DataGridView. mi consulta es:
¿Como puedo poner los datos del DataGridView a solo lectura, pero que se puedan seleccionar?...
Si uso la propiedad ReadOnly del DataGridView no me deja seleccionar el VALOR de la celda, y a me interesa poder copiar los valores de las celdas pero que estos no se puedan modificar.
Estare atento a sus respuestas. Gracias.
Respuestas
-
Hola:
En lugar de establecer a True el valor de la propiedad ReadOnly del propio control DataGridView, entiendo que lo que tienes que hacer de sólo lectura es el control TextBox subyacente que existe en cada celda del control DataGridView. Para ello, en el evento EditingControlShowing del control DataGridView, ejecutarías lo siguiente:
Private Sub DataGridView1_EditingControlShowing( _ ByVal sender As Object, _ ByVal e As DataGridViewEditingControlShowingEventArgs) _ Handles DataGridView1.EditingControlShowing ' Referenciamos el control TextBox subyacente en la celda actual. ' Dim cellTextBox As TextBox = _ DirectCast(e.Control, DataGridViewTextBoxEditingControl) cellTextBox.ReadOnly = True End Sub
Lo anterior te permitirá seleccionar los datos de la celda para copiar el texto, bien con el teclado, bien con el menú contextual. Pero lo que no te permitirá será actualizar los datos existentes.
Un saludo
Enrique Martínez [MS MVP - VB]- Propuesto como respuesta Enrique M. MontejoModerator sábado, 19 de septiembre de 2009 18:35
- Marcado como respuesta P. J. _ lunes, 21 de septiembre de 2009 19:32
Todas las respuestas
-
hola
busca las propiedades
AllowUserToAddRows
AllowUserToDeleteRows
y ponlas en false
fijate que si presionas en el pequeño icono de flecha en el borde superior derecho del control datagridview veras tres opciones, una de ellas es "Enable Editing"
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Gracias, pero eso es lo mismo que si pusiera: me.datagridview1.readonly=true
Lo que buscaba era como conservar las celdas en modo SOLO LECTURA, pero que te permita seleccionar el contenido de cualquier celda. Creo que esto va mas por el lado de programar en algun evento, espero se haya entendido y si alguien lo sabe comentelo.
Saludos. -
hola
pero no hace falta editar las fila para poder copiarlas, o sea selecciona la row o celda y presionas Ctrl+C, luego ve a un notepad y pega, deberias pasarte los datos
O sino puede que necesites algo como esto:
Cómo: Permitir que los usuarios copien varias celdas en el Portapapeles desde el control DataGridView de formularios Windows Forms
DataGridView.ClipboardCopyMode (Propiedad)
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Claro, si se puede copiar toda la fila, mas no 1 celda por separado.
Lo que pasa es que lo vi en un sistema enlatado, yo quiero implementar eso en unas pantallas adicionales que tengo. En el sistema enlatado te muestra los registros y seleccionas la fila entera, pero si das un clic sobre cualquier celda se habilita como para editar (se muestra el lapiz en el rowheader) pero si intentas sobreescribir no te deja.
Eso es lo que ando buscando.
Saludos. -
hola
no has probado habilitar entonces las opciones de edicion, pero en los evento de edicion guardar los datos de la row o celda, y cuando termine de editar si modifico algo volverle el cambio hacia atras (un roolback) dejandolo como estaba originalmente
CellBeginEdit
CellEndEdit
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Bueno, la idea fundamental es que no sea posible la edicion de las celdas, pero si su seleccion por separado. Ya se como esta hecho, la propiedad READONLY del Datagrid en .net 2003 te permite el efecto que busco.
Por el contrario la propiedad READONLY del DataGridView en 2005 te bloquea por completo la celda, asi que no creo sea posible (hasta ahora) el efecto del 2003.
Muchas Gracias por tomarte la molestia de responder. -
Hola:
En lugar de establecer a True el valor de la propiedad ReadOnly del propio control DataGridView, entiendo que lo que tienes que hacer de sólo lectura es el control TextBox subyacente que existe en cada celda del control DataGridView. Para ello, en el evento EditingControlShowing del control DataGridView, ejecutarías lo siguiente:
Private Sub DataGridView1_EditingControlShowing( _ ByVal sender As Object, _ ByVal e As DataGridViewEditingControlShowingEventArgs) _ Handles DataGridView1.EditingControlShowing ' Referenciamos el control TextBox subyacente en la celda actual. ' Dim cellTextBox As TextBox = _ DirectCast(e.Control, DataGridViewTextBoxEditingControl) cellTextBox.ReadOnly = True End Sub
Lo anterior te permitirá seleccionar los datos de la celda para copiar el texto, bien con el teclado, bien con el menú contextual. Pero lo que no te permitirá será actualizar los datos existentes.
Un saludo
Enrique Martínez [MS MVP - VB]- Propuesto como respuesta Enrique M. MontejoModerator sábado, 19 de septiembre de 2009 18:35
- Marcado como respuesta P. J. _ lunes, 21 de septiembre de 2009 19:32
-