2009-09-16 70 views
4

我正在使用一組DataGridViews(dgv)通過屬性顯示類的成員。我使用dgv,以便用戶可以在視圖中編輯成員權限的值(所以我不必顯示用於編輯該值的表單或文本框)。DataGridView對象數據綁定問題「索引-1沒有值」

我顯示類的結構如下

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到它們各自的父類,我重新綁定顯示集合的dgv。

添加新類的實例後,它出現在dgv中,但是如果我去選擇值(通過點擊它dgv)我收到一個異常,指出「索引-1沒有值」

如果發生此問題,則不會發生此問題將編輯好的信息保存到表單中,然後重新打開表單。我以前無法編輯的值是可編輯的,沒有問題。

+0

你能發表一些代碼嗎? – 2009-09-16 21:40:17

+0

代碼的哪些部分對發佈有幫助?這種形式有很多代碼。你想看看類或表單代碼嗎? – 2009-09-16 21:53:55

+0

如何在父母中添加class2或class3之後重新綁定dgv? – 2009-10-01 02:19:46

回答

10

我知道這個問題是舊的,但:

如果您最初綁定一個收集不更改通知給DGV(如集合不,但的BindingList一樣),初始當前行偏移被正確地設置爲-1,(因爲它是空的。)

當您隨後對象添加到您的數據綁定收集他們仍然會顯示正常發車,但CurrencyManager的不會是我任何更改都會執行,並且當前行偏移量將固定保持在-1。

因此,當您嘗試編輯一行時,CurrencyManager會認爲您正在嘗試編輯偏移量爲-1的行,並引發異常。

爲了解決這個問題,您需要在與行進行交互之前重新綁定,或者在包含一個或多個項目時最初綁定集合等。

0

我改變了我的數據源從列表(Of T)對列表(Of T)已.ToArray()

+1

添加一些解釋,爲什麼這解決了這個問題將極大地幫助。 – 2014-01-24 20:46:12

0

我也知道這是老了,但我有這個掙扎,我找到了最好的解決方案,而不是使用的BindList的常規列表。

0

我剛剛在一個非常簡單的應用程序中遇到了「索引-1」的非常類似的問題,該應用程序正在執行可選數據集的「僅顯示」。這完全是我的錯,因爲我曾使用List,直到突然它沒有工作,它才工作得很好。切換到BindingList解決了它。