Подтвердить что ты не робот

Исключение NullReferenceException при настройке AutoSizeMode для AllCells в DataGridView

Я вручную привязываю первую таблицу кода рамки сущности к представлению datagridview. Когда я устанавливаю AutoSizeMode в AllCells и добавляю экземпляр в таблицу, я получаю исключение NullReferenceException во время добавления.

Код работает следующим образом:

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

Вот соответствующая часть из трассировки стека:

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)

Таблица Лица в противном случае пусты. Когда я удаляю AutoSize - Инструкция, все в порядке.

Plattform: WInForms в .Net 4.5.1 с использованием Studio 2013; Запуск Win8 Pro, EF 6.1.3

Изменить: Удалена опечатка, которая ввела второй gridview

4b9b3361

Ответ 1

AutoSize всех ячеек означает, что представление сетки данных должно оценивать результат для каждого столбца. EF должен предоставить результат для каждой строки. Похоже, что вы, вероятно, привязываетесь к столбцу внешнего ключа. Если значение в строке не соответствует строке в внешней таблице, тогда datagridview выдает эту ошибку. У EF есть проблема, когда значение в таблице ДОЛЖНО соответствовать значению в чужой таблице, чувствительному к регистру... независимо от того, является ли SQL чувствительным к регистру. EF использует CLR для выполнения сопоставления сущностей... который чувствителен к регистру

Ответ 2

Попробуйте сначала добавить данные, а затем использовать их

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

Ответ 3

Вы также можете попробовать это.

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