DataGridView行號發生變化 使用的事件


DataGridView並沒有這么專門為行號發生變化時觸發的事件,我們只能用SelectionChanged和CurrentCellChanged做些設置后實現。

1、使用SelectionChanged事件

MSDN的事件說明:此事件會在選擇或取消選擇單元格(無論是以編程方式還是通過用戶操作的方式)時發生(所以此事件與CurrentCellChanged一樣,是針對單元格設計的,DataGridView本身就是針對單元格設計的)。例如,當您希望顯示當前選定的單元格之和時,此事件非常有用。當您更改 CurrentCell 屬性的值時,SelectionChanged 事件發生在 CurrentCellChanged 事件之前。此時訪問 CurrentCell 屬性的任何 SelectionChanged 事件處理程序都將獲取其以前的值。

說明:我們要求的是行號改變時才觸發事件,那么我們可以在事件后判斷行號是否發生變化,或者將selectionmode屬性設置為FullRowSelection,也就是整行選擇模式,這樣就可以實現要求了。

問題:在初始化DataGridView時,系統會觸發N次SelectionChanged事件,而我們希望用戶通過鼠標點擊或鍵盤選擇的方式改變行號時才觸發事件,所以我們還需要設置一個開關,用來指示什么時候開始處理該事件。

2、使用CurrentCellChanged事件(!!!)

說明:這個就是當前單元格發生變化時觸發的事件,用法和問題和SelectionChanged事件幾乎一樣,但是觸發順序不同。因為SelectionChanged要發生在CurrentCellChanged之前,所以用dataGridView1.Rows[xx].Selected = true;的形式或dataGridView1.CurrentCell = dataGridView1.Rows[xx].Cells[xx]改變單元格時,用SelectionChanged事件獲取的CurrentCell值為改變之前的值,而一般情況我們想要獲取的是改變后的值,所以SelectionChanged就無法實現我們的要求。

所以:一般情況,我們更多的使用CurrentCellChanged事件。

 當然,CurrentCellChanged事件也有一些問題,例如窗體加載完畢后,CurrentCell 從NULL被默認賦值為第一行第一列時,系統會觸發CurrentCellChanged事件,而一般情況我們只希望用戶點擊或代碼控制的方式觸發事件。類似的情況在SelectionChanged事件則不會發生。

 

總結:如果不需要使用代碼改變CurrentCell 的值,而僅需要響應鼠標和鍵盤給CurrentCell 帶來的變化,那就使用SelectionChanged事件吧,否則,使用CurrentCellChanged可能更能實現任務要求。一般情況下是這樣。


—————————分割—————————————————

另外,附帶說明一下RowStateChanged事件,也就是行狀態發生變化時觸發的事件,這個事件無法實現行號變化而觸發這個要求,因為當我們從一行選擇至另一行時,先觸發原行號的狀態變事件,然后觸發新行號的狀態變更事件,也就是換一次行,觸發兩次事件。


免責聲明!

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



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