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

转载于:https://www.cnblogs.com/qi123/p/7361440.html

DataGridView行号发生变化 使用的事件相关推荐

  1. DEV控件Grid显示行号

    DEV控件Grid的显示行号需要通过一个事件来设置,具体设置代码为: private void gridView1_CustomDrawRowIndicator(object sender, DevE ...

  2. datagridview选中获取行号_DataGridView控件显示行号的正确代码及分析

    前些天在写个小程序,用到DataGridView,想给它动态的显示行号.不是很费劲GOOGLE了一下,这GOOGLE不要紧,发现了不少问题.以下基本上都是GOOGLE搜索出来的网上的一些解决方法,千篇 ...

  3. 根据鼠标点击位置获取DataGridView的选择行号。

    一个非常非常郁闷的问题:在DataGridView中当右键点击某一行的时候才显示右键菜单. 找了好几个方法结果总是回归到对鼠标点击位置的判断,用鼠标点击位置来判断点中的是哪一行. 找了好几个函数都没有 ...

  4. 定制DataGridView快捷菜单ContextMenuStrip的关联事件

    前言 经常使用表格控件DataGridView的行关联快捷菜单(也称为上下文弹出菜单)ContextMenuStrip,基本步骤如下: 在窗体上设计ContextMenuStrip快捷菜单控件: 设置 ...

  5. GridView行号大集合

    aspx页面: <asp:GridView ID="gvDataInfo" runat="server" AutoGenerateColumns=&quo ...

  6. EasyUI datagrid : 启用行号、固定列及多级表头后,头部行号位置单元格错位的问题...

    症状如图: 上图中,行号列与checkbox 列融合了.解决方法是在datagrid 的 onLoadSuccess 事件中加入如下代码: var opts = $(this).datagrid('o ...

  7. WPF DataGrid 在Header中显示行号

    在Datagrid中显示行号,如果你绑定的datacontext中没有序号,又想要显示序号的时候,可以按照本文的方法显示喽~ 效果如下图: 来看看代码吧~ MainWindow.xaml <Wi ...

  8. C# RichTextBox 做简单的HTML代码编辑器 ---------利用WinApi修正左侧显示行号 误差

    说明:通过WinApi可以准确定准滚动位置. //行号 生成显示 这里rtbLineNum用的 RichTextBox,也可以用其它private void ShowLineNum(){rtbLine ...

  9. C# RichTextBox 做简单的HTML代码编辑器 ---------左侧显示行号

    说明:此显示行号为实际行号,不论是空行还是自动换行,都计算在内,跟实际IDE的行号不同,同步滚动会有半行高度以内的误差. 实现原理,在RichTextBox 编辑器左侧放置另一RichTextBox ...

  10. SQL Server之 (四) ADO增删查改 登录demo 带参数的sql语句 插入自动返回行号

    SQL Server之 (四) ADO增删查改  登录demo  带参数的sql语句  插入自动返回行号 自己学习笔记,转载请注明出处,谢谢!---酸菜 1.什么是ADO.NET ADO.NET是一组 ...

最新文章

  1. c++ 类数组_输入输出流IO体系及常用类关系结构(精要收藏)
  2. python之路---25 模块和包
  3. python在线编辑器编译excel_python在线编译器的简单原理及简单实现代码
  4. openwrt开发过程简介
  5. matplotlib xticks 基于 旋转_数据可视化之 matplotlib 绘图篇
  6. ztree 更新配置后重新渲染树_【问】zTree异步加载时添加父节点怎样避免再次加载整树...
  7. 算法9---二叉树的遍历不用栈和递归
  8. SpringBoot整合Scala构建Web服务
  9. Maven实战从入门到精通(全)
  10. 【大数据之路-阿里巴巴大数据实践】第一篇 数据技术篇
  11. HTML鼠标悬停的语法
  12. 看图和步骤教你把dwg转换成pdf格式
  13. 聚类系数与小世界网络
  14. H5页面在微信中下载APP的解决办法
  15. 页面增加问号图标,鼠标放置会提示文字信息。(记录日志)
  16. python发微博头条文章_Python脚本实现自动发带图的微博
  17. java拆弹,CSAPP lab2 二进制拆弹 binary bombs phase_2
  18. [buuctf][Zer0pts2020]easy strcmp
  19. [转载]你手里期权值多少钱?写给上市公司的同学
  20. 如何把canvas元素作为网站背景总结详解

热门文章

  1. tcp服务端无故死掉了linux,TCP服务端socket会丢连接的诡异问题及思考
  2. cc2530定时器和捕获比较_STM32学习笔记07—基础定时器实验
  3. C++ boost multiprecision类型转换 u256转double
  4. NPM 常用命令和参数的意思
  5. Remix恢复已部署的合约
  6. Hyperledger Fabric 架构 处理交易流程 账本
  7. 并行 并发 多线程 区别
  8. 怎么判断噎到没噎到_怎么判定股市是在走牛市还是走熊市呢?两种最简单的判定方法...
  9. Unity3D(七)声音
  10. 阶段3 3.SpringMVC·_05.文件上传_2 文件上传之传统方式上传代码回顾