2009-05-27 10 views
7

Tengo un DataGridView, que no está configurado como ReadOnly. Ninguna de sus columnas está configurada como ReadOnly, y el objeto al que está vinculado no está configurado como ReadOnly. Sin embargo, no puedo editar los elementos de DataGridView? La propiedad .DataSource de DataGridView está configurada como ReadOnlyCollection <>, pero puedo modificar los elementos de forma programática, pero no desde la interfaz de usuario. ¿Que esta pasando?¿Por qué no puedo editar los valores en mi DataGridView, aunque no está configurado como ReadOnly?

+0

¿Cómo intentas editar los elementos? ¿Cuáles son los comportamientos que crees que deberías estar viendo y que no ves? – David

Respuesta

9

Resulta que si su DataGridView está enlazado a un ReadOnlyCollection, a pesar de que puede editar mediante programación cualquier elemento en la colección, DataGridView le impedirá cambiar los valores. No estoy seguro de si este comportamiento es intencional, pero es algo de lo que hay que tener cuidado.

+0

No se puede reproducir ... ver a continuación. Con ReadOnlyCollection <> none son editables ... –

+1

Es malo, resulta que "la columna que se puede cambiar" en realidad no estaba correctamente ligada a la fuente de datos todo el tiempo. – GWLlosa

+1

+1 Desearía haber buscado SO en la mañana. Este me tomó horas de golpear mi cabeza contra la pared antes de que lo descubriera. – Rytmis

3

Esto es solo un comentario extendido (por lo tanto, wiki) en contra de "el DataGridView le impedirá cambiar algunos valores (cuerdas) pero no otros valores (bools)" punto; ninguno es editable; que sea un List<T> y ambos son editables ...:

using System; 
using System.Collections.ObjectModel; 
using System.Windows.Forms; 
class Test 
{ 
    public string Foo { get; set; } 
    public bool Bar { get; set; } 

    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     var data = new ReadOnlyCollection<Test>(
      new[] { 
       new Test {Foo="abc", Bar=true}, 
       new Test {Foo="def", Bar=false}, 
       new Test {Foo="ghi", Bar=true}, 
       new Test {Foo="jkl", Bar=false}, 
      }); 
     Application.Run(
      new Form { 
       Text = "ReadOnlyCollection test", 
       Controls = { 
        new DataGridView { 
         Dock = DockStyle.Fill, 
         DataSource = data, 
         ReadOnly = false 
        } 
       } 
      }); 
    } 
} 
+0

Whoops. Resulta que la "columna editable" era en realidad un error ortográfico en el código de enlace de datos, por lo que en realidad era "la única columna editable que en realidad no estaba vinculada a la fuente de datos todo el tiempo". – GWLlosa

2

¿Cómo te liga a su DataGridView? Una cosa es que si está utilizando una lista de Linq como origen de datos consultado desde una base de datos y no tiene el objeto completo, entonces las propiedades son de solo lectura a menos que especifique "con nuevo" en la función de selección. No hay mucha información en su publicación. Espero que esto ayude.

2

he instalado VS 2013 ayer, última versión (actualización 5) y un error sigue siendo que hace que el comportamiento que usted describe.

En resumen para evitar el error, primero asegúrese de que datagridview esté configurado para ser editable por GUI. Esto incluye especialmente la pequeña flecha en el diseñador de formularios en la parte superior derecha del control. En la flecha desplegable hay una opción "habilitar edición", asegúrese de que esté habilitada. Ahora, en el diseñador de formularios, edite las columnas de alguna manera importante (como agregar o quitar una columna). Eso es todo, cuando ejecutas el programa, debes encontrar que la edición GUI está funcionando ahora.

Para reproducir este error, dentro del diseñador de formularios use la pequeña flecha en la parte superior derecha del control datagridview para establecer "enable editing" en false. Ahora realice un cambio importante en las columnas (como agregar o quitar una columna). Compilar y ejecutar el programa. Ahora regrese a la pequeña flecha y vuelva a habilitar la casilla de verificación "habilitar edición". De nuevo ejecuta el programa. En este punto, el error se manifiesta y verá que la vista de cuadrícula de datos no es editable por GUI aunque haya configurado lo contrario en el SV.

Cuestiones relacionadas