[轉]C# dataGridview 報“索引-1沒有值”的解決辦法


很多WINFORM的開發人員在DataGridView的開發當中,都會出現“索引-1沒有值”這個煩人的問題,其實較早之前,我已經大概知道問題的所在,也找到了解決方法,不過一直沒有時間去深入研究一下,今日做了一個測試,發現問題的所在,我不知道這個問題是否應為MS的BUG,但至少我個人認為這個問題不應該出現!

 

下面先說說構成這個錯誤的現像。

 

首先出面這個錯誤,絕大多數的開發人員都是進行數據綁定之后出現的,而且出現的情況基本上都只得一種,就是開始綁定的數據集是非空的,但數據集的Count=0,在將這個非空的而元素個數為0的數據集綁定到DataGridView后,當更新DataGridView的數據源,即將一個元素個數大於0的數據集綁定給DataGridView后,DataGridView仍能正常顯示,以上還是正常的,但問題就出在,當你用鼠標點擊DataGridView后,“索引-1沒有值”這個惱人的錯誤就會出現。

 

其實以上的文字基本上已經讓你知道問題的所在,就是第一次綁定的“非空的且元素個數為0的數據集”,經運行時查看對象屬性,由於只要數據集不為空,DataGirdView就必需指定當前單元格(CurrentCell),但“非空0元數數據集”的CurrentCell是為null,致使后來更新數據集后,這個CurrentCell仍不會變,因為你的數據集沒有改變,只是數據集的數目改變了,所以CurrentCell不變,所以當你點擊鼠標進去后,返回的當前行就出錯了!

 

解決的方法很簡單,第一,綁定數據集時,判斷數據集是否為空,是否元素個數大於0,如果符合條件的才將數據集綁定;第二,如果已經綁定了,可以判斷當前數據集的元素個數是否為0,如果大於0則設置CurrentCell。

 

第一解決方法:

if (dataSource != null && dataSource.Count > 0) { dataGridView1.DataSource = dataSource; }

 

第二解決方法:

if (dataGridView1.Rows.Count > 0) { dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[1]; }

順帶一提,設置時,Cell的Index對應的列,必需為可視的;

 

 

 

來源:http://www.cnblogs.com/badtree/articles/1799170.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM