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事件,也就是行状态发生变化时触发的事件,这个事件无法实现行号变化而触发这个要求,因为当我们从一行选择至另一行时,先触发原行号的状态变事件,然后触发新行号的状态变更事件,也就是换一次行,触发两次事件。

最新文章

  1. iOS 删除、重新排序xcdatamodel
  2. 详解学习C#的方法和步骤
  3. FireMonkey 保存图片到JPG的方法 BMP转JPG
  4. 用JS控制video暂停再播放
  5. 快速入门:十分钟学会Python
  6. Java内存访问重排序笔记
  7. zend studio12.5破解方法
  8. linux设备驱动层次
  9. week 9 scenario testing
  10. struts2传递List对象(复合对象)
  11. android报错——findViewById报错
  12. x86 构架的 Arduino 开发板Intel Galileo
  13. POJ1850 组合数学
  14. android特效
  15. apicloud
  16. JavaWeb(四)JDBC操作Oracle
  17. Scrapy实战篇(六)之爬取360图片数据和图片
  18. Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
  19. redis学习(四)——Hash数据类型
  20. 你分得清楚Maven的聚合和继承吗?

热门文章

  1. ECCV 2018 目标检测 | IoU-Net:将IoU的作用发挥到极致
  2. 第十七周Java实验作业
  3. ThinkPHP的几种路由形式总结
  4. node 模块载入原理【1】
  5. 判断网站CMS
  6. windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 问题解决办法
  7. 基于KNN的发票识别
  8. Java——写一个求和 “方法”
  9. 添加windows开机自启动项
  10. 使用node.js中遇到的一些小bug