我正在使用一些自定义业务对象构建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)
我确定我错过了一些东西,但我不知道它是什么......
提前致谢 -
答案 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>();