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

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

 

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

 

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

 

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

 

解決的方法很簡單,第一,綁定數據集時,判斷數據集是否爲空,是否元素個數大於0,若是符合條件的纔將數據集綁定;第二,若是已經綁定了,能夠判斷當前數據集的元素個數是否爲0,若是大於0則設置CurrentCell。blog

 

第一解決方法:索引

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

相關文章
相關標籤/搜索