2009-05-27 19 views
7

Ho un DataGridView, che non è impostato su ReadOnly. Nessuna delle sue colonne è impostata su ReadOnly e l'oggetto a cui è associato non è impostato su ReadOnly. Tuttavia, non posso modificare gli oggetti DataGridView? La proprietà .DataSource di DataGridView è impostata su ReadOnlyCollection <>, ma posso modificare a livello di codice gli elementi, non solo dall'interfaccia utente. Cosa sta succedendo?Perché non posso modificare i valori nel mio DataGridView, anche se non è impostato su ReadOnly?

+0

Come stai cercando di modificare gli elementi? Quali sono i comportamenti che pensi dovresti vedere che non vedi? – David

risposta

9

Si scopre che se il tuo DataGridView è associato a un ReadOnlyCollection, anche se è possibile modificare in modo programmatico qualsiasi elemento nella raccolta, DataGridView ti impedirà di modificare i valori. Non sono sicuro che questo comportamento sia intenzionale, ma è qualcosa a cui prestare attenzione.

+0

Impossibile riprodurre ... vedi sotto. Con ReadOnlyCollection <> nessuno è modificabile ... –

+1

Il mio male, si scopre che "l'unica colonna che può essere modificata" in realtà non era correttamente legata all'origine dati per tutto il tempo. – GWLlosa

+1

+1 Vorrei aver cercato SO al mattino. Questo mi ha portato ore a sbattere la testa contro il muro prima che me ne rendessi conto. – Rytmis

3

Questo è solo un commento esteso (quindi wiki) in contrasto con "il DataGridView ti impedirà di modificare alcuni valori (stringhe) ma non altri valori (bool)" punto; nessuno dei due è modificabile; ne fanno un List<T> ed entrambi sono modificabili ...:

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. Risulta che la "una colonna modificabile" era in realtà un errore di battitura nel codice di associazione, quindi in realtà era "l'unica colonna modificabile che non era effettivamente legata all'origine dati per tutto il tempo". – GWLlosa

2

Come si sono vincolanti per il vostro DataGridView? Una cosa è che se si sta utilizzando un elenco Linq come origine dati interrogata da un database e non si ha l'oggetto completo, le proprietà sono in sola lettura a meno che non si specifichi "con nuovo" nella funzione di selezione. Non ci sono molte informazioni nel tuo post. Spero che aiuti.

2

ho installato VS 2013 proprio ieri, ultima build (aggiornamento 5) e un bug rimane ancora che causa il comportamento che descrivi.

In breve, per ovviare al problema, assicurarsi innanzitutto che la vista datagrid sia configurabile con la GUI. Ciò include in particolare la piccola freccia nella finestra di progettazione del modulo in alto a destra del controllo. Nel menu a discesa della freccia c'è un'opzione "attiva la modifica", assicurati che sia abilitata. Ora nella finestra di progettazione del modulo le colonne vengono modificate in modo sostanziale (come aggiungere o rimuovere una colonna). È così, quando esegui il programma dovresti trovare che la modifica della GUI sta funzionando ora.

Per riprodurre questo bug, nel modulo di progettazione utilizzare la piccola freccia in alto a destra del controllo datagridview per impostare "abilita modifica" su falso. Ora apporta una modifica importante alle colonne (ad esempio aggiungi o rimuovi una colonna). Compilare ed eseguire il programma. Ora torna alla piccola freccia e riabilita la casella di controllo "abilita modifica". Di nuovo, esegui il programma. A questo punto l'errore si manifesta, e scoprirai che il datagridview non è modificabile dalla GUI anche se hai configurato diversamente nel VS.

Problemi correlati