在DataGridView中将AutoSizeMode设置为AllCells时出现NullReferenceException

时间:2015-04-10 13:24:12

标签: c# winforms entity-framework datagridview nullreferenceexception

我手动将实体框架代码第一个表绑定到datagridview。当我将AutoSizeMode设置为AllCells并向表中添加实例时,我在Add期间得到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:使用Studio 2013的.Net 4.5.1中的WInForms;运行Win8 Pro,EF 6.1.3

编辑:删除了引入第二个gridview

的拼写错误

3 个答案:

答案 0 :(得分:4)

自动调整所有单元格意味着数据网格视图需要评估每列的结果。 EF需要提供每行的结果。您似乎可能绑定到外键列。如果行中的值与外表中的行不匹配,则datagridview将抛出此错误。 EF有一个问题,表中的值必须匹配外表中的情况敏感的值...无论SQL是否区分大小写。 EF正在使用CLR执行实体匹配...这是区分大小写的

答案 1 :(得分:1)

首先尝试添加数据然后再使用

{{1}}

答案 2 :(得分:0)

你也可以尝试这个

'modules' => [
    'user-management' => [
        'class' => 'webvimark\modules\UserManagement\UserManagementModule',
        // Here you can set your handler to change layout for any controller or action
        // Tip: you can use this event in any module
        'on beforeAction' => function (\yii\base\ActionEvent $event) {
            if ($event->action->uniqueId == 'user-management/auth/login') {
                $event->action->controller->layout = 'loginLayout.php';
            };
        },
    ],
],