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事件,也就是行状态发生变化时触发的事件,这个事件无法实现行号变化而触发这个要求,因为当我们从一行选择至另一行时,先触发原行号的状态变事件,然后触发新行号的状态变更事件,也就是换一次行,触发两次事件。
DataGridView行号发生变化 使用的事件的更多相关文章
- DEV控件Grid显示行号
DEV控件Grid的显示行号需要通过一个事件来设置,具体设置代码为: private void gridView1_CustomDrawRowIndicator(object sender, DevE ...
- C# DataGridView显示行号的三种方法
方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dgGrid_RowPostPaint( obj ...
- DataGridView显示行号的几种方法来自http://www.soaspx.com/dotnet/csharp/csharp_20100204_2740.html
方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dataGridView1_RowPostPai ...
- 【转】DataGridView显示行号
ref:http://blog.csdn.net/xieyufei/article/details/9769631 方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件 ...
- 让DataGridView显示行号
http://www.cnblogs.com/JuneZhang/archive/2011/11/21/2257630.html 为了表示行号,我们可以在DataGridView的RowP ...
- DataGridView自动行号
最近又用了一下DataGridView控件,需要显示行号,我们知道在.net中DataGridView控件默认是不显示行号(数据的记录行数)的,后来通过查资料发现可以在DataGridView控件的R ...
- DataGridView大扩展——显示行号
原文 DataGridView大扩展——显示行号 在DataGridView 的实际使用中,经常需要标示出行号,这样可以比较醒目地看到当前信息.不过DataGridView 在绘制 DataGridV ...
- DataGridView显示行号-RowPostPaint
DataGridView控件在显示数据时,我们有时候需要显示行号,以便检索查看方便使用. 但DataGridView默认没有设置显示行号的属性. 此时我们只要在DataGridView的RowPost ...
- Winform中的DatagridView显示行号
1.设置 RowPostPaint 为true 2.启用RowPostPaint事件 /// <summary> /// DataGridView显示行号 /// </summary ...
随机推荐
- 题解 P1748 【H数】
我来讲讲 \(dp\) 的做法 前言 昨天 \(PHY\) 大佬问我,这题怎么做?考虑到他没学过 \(set\) . \(priority_queue\) 和 \(queue\) .之后,我就想到了可 ...
- 刷oj之类的题时java Scanner读取太慢解决之道
1.转载自一个 https://www.cpe.ku.ac.th/~jim/java-io.html 2.工具代码 class Reader { static BufferedReader reade ...
- Ubuntu16.04下安装搜狗输入法及实现中英文转换问题
1.问题描述 版本信息:Ubuntu16.04 解决问题:搜狗输入法的安装 2.解决办法 STEP1:搜索搜狗输入法for Linux --> 选择64bit --> 下载得到一个sogo ...
- TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人。
简介 TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人. 文章包括一下几个部分: 1.为什么要尝试做这个项目? 2.为 ...
- python3读取excel
说明 2007版以前的Excel(xls结尾的),需要使用xlrd读,xlwt写. 2007版以后的Excel(xlsx结尾的),需要使用openpyxl来读写. pypi的地址: https://p ...
- 安装arcgis server时提示“应用程序无法启动,因为应用程序......或使用命令行sxstrace.exe”
说一下这个原因:有几个条件不满足会产生这样的问题: 1.软件的发布是不需要安装的,直接在vs里编译好release版就发布了,而发布的时候如果缺少一些库文件,就会产生这样的问题. 一版都是目 ...
- 《自拍教程52》Python_adb运行Shell脚本
Android作为一款Linux终端,肯定是支持.sh后缀的Shell脚本的运行的, 有时候测试环境准备或者长时间截取复杂的日志等,开发会给到一些Shell脚本. Shell脚本的执行的优势: 快捷高 ...
- coding++:error 阿里云 Redis集群一直Waiting for the cluster to join....存在以下隐患
1):Redis集群一直Waiting for the cluster to join... 再次进行连接时首先需要以下操作 1.使用redis desktop Manager连接所有节点 调出命令窗 ...
- Python操作JSON数据代码示例
#!/usr/bin/env python import json import os def json_test(): return_dic = {} json_data = { 'appid':' ...
- Codeforces 1332F - Independent Set(树dp)
题目链接 题意 给出一棵 n 个点的树, 求它的所有非空诱导子图的独立集种类数之和, 对 998244353 取模. n ≤ 3e5. 题解 不妨假设在独立集中的点被染色成 1, 其余不染色; 由于不 ...