2013-03-01 83 views
2

我一直在努力解決這個問題幾個小時。單擊DataGridView時出現IndexOutOfRangeException錯誤

這是發生了什麼:

當我的窗體加載時,我有一個空List<Entity>作爲數據源一個DataGridView。

DataGridView.Datasource = null; 
DataGridView.Datasource = entity_list; 

首先,我將它設置爲null以便更新DataGridView。

然後,我可以將實體添加到該列表中,以便每次添加一個代碼時都會執行該代碼段。

我得到的問題是,在向列表中添加一個實體並更新數據源後,當單擊DataGridView時,我得到了一個IndexOutOfRangeException。這很奇怪。

+0

我想你誤解了「回答你自己的問題」的部分請閱讀http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/多一次 – 2013-03-01 15:05:10

+0

@SonerGönül你是什麼意思?我剛讀過它,它說這樣做很好。我只是花時間寫這篇文章,因爲我沒有在網絡或SO中找到任何解決方案。我只是想幫助那些可能和我一樣的人。 – Andres 2013-03-01 15:10:55

+0

但是你沒有用問題的形式來表達它,也就是那個環節中的第二句話。 – MyCodeSucks 2013-03-01 15:11:42

回答

2

問題出現是因爲我可以將實體添加到該List,並且由於某種原因,如果DataSource是一個空列表,當您嘗試向其中添加一個實體時,此異常就會顯示出來。

因此,我使用的解決方案是在進行列表綁定之前詢問,如果該列表中至少有1個實體。

DataGridView.DataSource = null; 
if (entity_list.Count() > 0) 
    { 
     DataGridView.DataSource = entity_list; 
    } 

而那就是它!解決了!我讀過使用BindingLists可以解決這個問題,但如果你像我一樣使用List,我希望這可以幫助你!

+0

這幫了我!我真的很想知道在這個計劃的更深層次上發生了什麼。對於我的數據源是值得的是KeyedCollection。 – vpipkt 2015-03-04 21:15:02

+0

我從這裏拿走的關鍵是你永遠不想將一個空列表綁定到DGV。我嘗試了BindingList解決方案,它也起作用,但在我看來這更清潔。謝謝! – pseudocoder 2015-09-23 13:41:47

相關問題