我正在使用一组 DataGridViews (dgv) 通过属性显示类的成员。我使用 dgv 以便用户可以在 View 中编辑成员的值(因此我不必显示表单或文本框来编辑该值)。
我展示的类的结构如下
Class1 (Displayed in a list view)
Collection Of class2 (Displayed in a dgv, we'll call it dgv1)
Collection of class3 (Displayed in a dgv, we'll call it dgv2)
Class3 存在是因为字符串集合在 dgv 中不显示为字符串。 (长度显示在 dgv 中。
Class2 和 Class3 具有我希望在 dgv 中可编辑的字符串属性,因此它们是 dgv 中显示的唯一值。
当我将 class2 或 class3 的新实例添加到它们各自的父类时,我会重新绑定(bind)显示集合的 dgv。
添加类的新实例后,它出现在 dgv 中,但是如果我去选择值(通过在 dgv 中单击它),我会收到一个异常,指出“索引 -1 没有值”
如果我将编辑的信息保存到表单中,然后重新打开表单,则不会出现此问题。我以前无法编辑的值可以毫无问题地编辑。
最佳答案
我知道这个问题很老但是:
如果您最初绑定(bind)不通知 DGV 更改的 空 集合(例如,集合不会,但 BindingList 会),则初始当前行偏移量将正确设置为 -1,(因为它是空的。)
当您随后将对象添加到数据绑定(bind)集合时,它们仍将 在网格上正确显示 ,但不会通知 CurrencyManager 任何更改,并且当前行偏移将顽固地保持在 -1。
因此,当您尝试编辑一行时,CurrencyManager 认为您正在尝试编辑偏移量 -1 处的一行,并引发异常。
为了解决这个问题,您需要在与行交互之前重新绑定(bind),或者在包含一个或多个项目时最初绑定(bind)一个集合等。
关于c# - DataGridView 对象数据绑定(bind)问题 "Index -1 does not have a value",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1435526/