作者Peruheru (还在想)
看板Visual_Basic
标题Re: [.NET] vb.net如何设定DataGridView中的select …
时间Tue Aug 4 23:19:53 2009
※ 引述《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
1F:→ Peruheru:对了,如果你的DataGridView支援复选,那情形就又不同了 08/04 23:22
※ 编辑: Peruheru 来自: 118.168.237.114 (08/04 23:24)
2F:推 aMaa:谢谢你喔,上个问题已经解决了,问题在於我TAB是自动NEW的, 08/06 15:05
3F:→ aMaa:重新载入时忘记把之前NEW的tabcontrol清除,所以旧的一直盖在 08/06 15:05
4F:→ aMaa:新new出来的tabcontrol上面,才看不出有新new的tabpage 08/06 15:06
5F:→ aMaa:目前这个问题我还在解 ^^" 08/06 15:06