带有自定义对象列表的DataGridView在编辑时抛出NotImplementedException

时间:2010-04-13 14:32:41

标签: c# winforms exception datagridview

我正在使用一些自定义业务对象构建WinForms应用程序。我使用BindingList将单个类型的对象的List绑定到DataGridView,并在我的对象上实现IEditableObject,但是当我尝试编辑DataGridView中的值时,我得到以下异常:


DataGridView中发生以下异常:

System.NotImplementedException:未实现方法或操作。 - 在System.ComponentModel.ReflectPropertyDescriptor.SetValue(对象组件,对象值) - 在System.Windows.Forms.DataGridView.DataGridViewDataConnection.PushValue(Int32 boundColumnIndex,Int32 columnIndex,Int32 rowIndex,Object value)

要替换此默认对话框,请处理DataError事件。

我确定我错过了一些东西,但我不知道它是什么......

提前致谢 -

3 个答案:

答案 0 :(得分:0)

错误消息告诉您需要知道的所有事项 - 您需要处理DataGridView的{​​{3}}事件。

我上面链接的MSDN页面也链接到DataError上的一篇文章也可能有用:

  

要在应用程序中使用事件,   你必须提供一个事件处理程序(一个   执行的事件处理方法   响应事件的程序逻辑   并使用注册事件处理程序   事件来源。这个过程是   被称为事件布线。该   Windows Forms和Windows的可视化设计师   Web窗体提供快速应用程序   简化的开发(RAD)工具   或隐藏事件布线的细节。

答案 1 :(得分:0)

嗯,显然我不是很善于观察......

问题是ReSharper使用NotImplementedException实现了我的属性,所以当我通过DataGridView编辑该属性时,它抛出了异常。

谢谢,抱歉浪费你的(和我的!)时间。

答案 2 :(得分:0)

我的例外是带有“索引-1”的自定义对象的列表:

List<Object> newObjList = new List<Object>();

OR

IList<Object> newObjList = new List<Object>();

分配快速和肮脏的方式:

dgv.DataSource = null                      //this is user preferred way to refresh list
dgv.DataSource = newObjList

通过将数据源分配转换为数组来解决此问题:

dgv.DataSource = newObject.ToArray<Object>();