30

Mi sto legando manualmente una tabella di codice del framework di entità prima a un datagridview. Quando imposto AutoSizeMode su AllCells e aggiungo un'istanza alla tabella ottengo una NullReferenceException durante l'aggiunta.NullReferenceException quando si imposta AutoSizeMode su AllCells in DataGridView

il codice viene eseguito in questo modo:

dbContext.Persons.Load(); 
myDataGridView.DataSource = dbContext.Persons.Local.ToBindingList(); 

myDataGridView.Columns[ "Description" ].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 

Person p = new Person(); 
p.Name = "Tester Alfred"; 
p.Description = "Description"; //no more properties, only those two (Id Property is annotated as [Key] 

dbContext.Persons.Add(p); // this throws a NullReferenceException 

Ecco la parte rilevante dalla analisi dello stack:

System.Data.Entity.Core.Objects.ObjectContext.AddSingleObject(EntitySet entitySet, IEntityWrapper wrappedEntity, String argumentName) 
    bei System.Data.Entity.Core.Objects.ObjectContext.AddObject(String entitySetName, Object entity) 
    bei System.Data.Entity.Internal.Linq.InternalSet`1.<>c__DisplayClassd.<Add>b__c() 
    bei System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) 
    bei System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) 
    bei System.Data.Entity.DbSet`1.Add(TEntity entity) 

La tabella Persone è altrimenti vuoto. Quando rimuovo l'AutoSize - Istruzioni tutto va bene.

Piattaforma: WInForms in .Net 4.5.1 utilizzando Studio 2013; Esecuzione di Win8 Pro, EF 6.1.3

Edit: errore di battitura Rimosso che ha introdotto un secondo GridView

+5

Sono lieto di scoprire che questo non è un duplicato del solito. –

+0

Cosa succede se si sposta l'aggiunta della nuova persona prima dell'associazione dati? –

+0

myDataGridView.Columns ["Descrizione"] sei sicuro che questa colonna esista ?? – Jacek

risposta

4

AutoSize tutte le celle indica che la vista griglia di dati deve valutare il risultato per ogni colonna. L'EF deve fornire il risultato per ogni riga. Sembra che tu stia probabilmente vincolando a una colonna di chiave esterna. Se il valore nella riga non corrisponde a una riga nella tabella esterna, la vista datagrid genererà questo errore. L'EF ha un problema in cui il valore nella tabella DEVE corrispondere al valore nella tabella esterna sensibile alla distinzione tra maiuscole e minuscole ... indipendentemente dal fatto che SQL sia sensibile al maiuscolo/minuscolo. L'EF sta utilizzando il CLR per eseguire la corrispondenza delle entità ... che è sensibile al maiuscolo-minuscolo

1

Prova ad aggiungere i dati e poi usarlo

myDataGridView .Columns[ "Description" ] .AutoSizeMode = 
DataGridViewAutoSizeColumnMode .AllCells ; 
0

Si può provare questo anche

DataGridViewColumn column = dataGridView.Columns[Index]; 
column.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;