為什麼這篇c# datagridview目前選取鄉民發文收入到精華區:因為在c# datagridview目前選取這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者Peruheru (還在想)看板Visual_Basic標題Re: [.NET] vb.net如...
※ 引述《aMaa (aMa)》之銘言:
: 通常DataGridView中有無設定.selectMode,當user按DataGridView某一地方時
: 就會出現藍色反白的區塊(可能是藍色反白一筆紀錄)
: 如何設定,user點選DataGridView的任何地方不會出現選取中藍色反白的區塊,
: 因為我程式有寫用其他顏色來表示已選取的紀錄,
: 所以藍色反白的區塊功用多了並外觀上不妥,
: 請各位為我解答,謝謝!
又是我來了,嘿嘿
上個問題妳解決了沒阿?
有沒有解決到都至少說一聲吧
DataGridView
剛好我上學期的期末作業有用到過
我用它的作用是拿來顯示經過Select語句後的資料表(DATA TABLE)
因為想弄的接近直覺化的選取
所以想作成 當選取其中一個Cell時
就會找出這筆Cell的位置,判斷它是第幾筆、以及是第幾欄的資料
在下面的修改區直接顯示該筆資料出來,並自動跳至選中的Cell對應的修改欄位
看了妳的問題後
覺得妳這要求或許可以使用我這做法加以變形來解決
重點就是選中時不要讓DataGridView產生選中狀態
只用妳自己的表達方式來呈現"選中"的動作吧?
我該程式的做法是這樣的:
在該DataGridView中
於其的CellClick、CellEnter、CellMouseClick、CellStateChanged事件中
反正就是在於任何會改變選取狀態的事件中
引發同一個共同的Sub(或Functin,看妳需要),在這我取名叫CellSelected
CellSelected接受三個引數:
sender As Object, RowIndex As Integer, ColumnIndex As Integer
呼叫CellSelected時,就把呼叫者sender傳入
並將e.Cell.RowIndex(上面所說的事件都會產生這個參數)傳給RowIndex
e.Cell.ColumnIndex就傳給第三個參數ColumnIndex
(其實也可以直接用Handle的方式直接Handle這些東西
不過反正原理相同,只是多做一步)
接著進行一些判斷
先判斷RowIndex的值,因為如果沒有真正選到某筆記錄
只是因為按到其他地方引發的話
這個值會是-1 (計數從0開始)
真的有選到(大於-1時)才要進入主要工作
另外columnIndex也會有類似情況,但可能發生的是
在最左邊的欄位上選擇一整個Row,此時會有RowIndex,但不會有ColumnIndex(-1)
在這我是把columnIndex放在RowIndex判斷裡面,並於其他事情都作完了才去判斷
因為我設計接受使用者按一整行而非只按一格Cell的情形
(這邊就看妳想怎麼做了)
因為妳要做的是不要讓DataGridView產生選取狀態
所以就是讓選取狀態從"是"變成"否"
DataGirdView1.Rows(i).Selected = False
(i就是被選取的那一行的RowIndex啦)
就可以讓該行選取狀態取消
但是同要要注意,Cell的選取跟一整個Row的選取是分開來的
如果發生了其實只有選到一格的情況
就還需要
DataGridView1.CurrentCell.Selected = False
這樣的做法
只是反過來說,CurrentCell也有可能不存在
所以這也是妳要先判斷的
另外,因為妳要用自己的顏色表示選取狀態
這個我沒做也不知道妳要怎麼做
不過在剛剛的判斷中
最好找個變數儲存被選中的RowIndex跟ColumnIndex
這樣應該比較方便於,讓妳自訂被選中Cell的外觀
因為畢竟,前面就已經把所有選取狀態給取消了
總要留個根據可以修改,這是我的想法
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.237.114