30

Ich bin manuell eine Entity Framework-Code erste Tabelle an eine Datagridview binden. Wenn ich den AutoSizeMode auf AllCells einstelle und eine Instanz zur Tabelle hinzufüge, erhalte ich während Add eine NullReferenceException.NullReferenceException beim Festlegen von AutoSizeMode auf AllCells in DataGridView

Der Code läuft wie folgt aus:

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 

Hier ist der relevante Teil aus dem Stack-Trace:

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) 

Die Tabelle Personen ist ansonsten leer. Wenn ich die AutoSize - Anweisung entferne, ist alles in Ordnung.

Plattform: WinForms in .Net 4.5.1 mit Studio 2013; Win8 Pro Rennen, EF 6.1.3

Edit: Entfernte Tippfehler, die ein zweites gridview eingeführt

+5

Ich freue mich, dass dies kein Duplikat des Üblichen ist. –

+0

Was passiert, wenn Sie das Hinzufügen der neuen Person vor die Datenbindung verschieben? –

+0

myDataGridView.Columns ["Description"] Sind Sie sicher, dass diese Spalte existiert ?? – Jacek

Antwort

4

AutoSize alle Zellen bedeutet, dass die Datenrasteransicht das Ergebnis für jede Spalte auswerten muss. Die EF muss das Ergebnis für jede Zeile liefern. Offenbar binden Sie sich wahrscheinlich an eine Fremdschlüsselspalte. Wenn der Wert in der Zeile nicht mit einer Zeile in der Fremdtabelle übereinstimmt, löst der Datagridview diesen Fehler aus. Die EF hat ein Problem, bei dem der Wert in der Tabelle mit dem Wert in der Fremdtabelle übereinstimmen muss, wenn die Groß-/Kleinschreibung beachtet wird ... unabhängig davon, ob SQL Groß- und Kleinschreibung unterscheidet. Die EF verwendet die CLR, um Entity-Matching durchzuführen ..., wobei die Groß-/Kleinschreibung beachtet wird

1

versuchen, die Daten zuerst das Hinzufügen und dann verwenden,

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

Sie können versuchen, diese auch

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