WinForm中DataGridView鼠标选中单元格内容复制方案

1、CTR+C快捷键复制

前提:该控件ClipboardCopyMode属性设置值非Disable;

2.鼠标框选,自定义代码实现复制

dataGridView1.SelectedCells可以获取单所有选中单元格。但是遍历单元格时,发现单元格顺序与界面显示顺序可能不一致。

Datagridview中selectionMode属性与顺序有关

通过代码输出各单元格行列索引来确定格子。代码如下:

   private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
var currcell = dataGridView1.CurrentCellAddress;
Console.WriteLine($"当前单元格{currcell.Y}--{currcell.X}");
var cells = dataGridView1.SelectedCells;
Console.WriteLine($"选中单元格数{cells.Count}");
for (int i = ; i < cells.Count; i++)
{
Console.WriteLine($"第{i+1}个格子:行:{cells[i].RowIndex}列:{cells[i].ColumnIndex}");
}
}

2.1selectionMode=FullRowSelect

case1:

框选单元格集合元素顺序

当前单元格4--2
选中单元格数33
第1个格子:行:4列:0
第2个格子:行:4列:1
第3个格子:行:4列:2
第4个格子:行:4列:3
第5个格子:行:4列:4
第6个格子:行:4列:5
第7个格子:行:4列:6
第8个格子:行:4列:7
第9个格子:行:4列:8
第10个格子:行:4列:9
第11个格子:行:4列:10
第12个格子:行:3列:0
第13个格子:行:3列:1
第14个格子:行:3列:2
第15个格子:行:3列:3
第16个格子:行:3列:4
第17个格子:行:3列:5
第18个格子:行:3列:6
第19个格子:行:3列:7
第20个格子:行:3列:8
第21个格子:行:3列:9
第22个格子:行:3列:10
第23个格子:行:2列:0
第24个格子:行:2列:1
第25个格子:行:2列:2
第26个格子:行:2列:3
第27个格子:行:2列:4
第28个格子:行:2列:5
第29个格子:行:2列:6
第30个格子:行:2列:7
第31个格子:行:2列:8
第32个格子:行:2列:9
第33个格子:行:2列:10

case2:

框选单元格集合元素顺序

当前单元格9--5
选中单元格数33
第1个格子:行:9列:0
第2个格子:行:9列:1
第3个格子:行:9列:2
第4个格子:行:9列:3
第5个格子:行:9列:4
第6个格子:行:9列:5
第7个格子:行:9列:6
第8个格子:行:9列:7
第9个格子:行:9列:8
第10个格子:行:9列:9
第11个格子:行:9列:10
第12个格子:行:10列:0
第13个格子:行:10列:1
第14个格子:行:10列:2
第15个格子:行:10列:3
第16个格子:行:10列:4
第17个格子:行:10列:5
第18个格子:行:10列:6
第19个格子:行:10列:7
第20个格子:行:10列:8
第21个格子:行:10列:9
第22个格子:行:10列:10
第23个格子:行:11列:0
第24个格子:行:11列:1
第25个格子:行:11列:2
第26个格子:行:11列:3
第27个格子:行:11列:4
第28个格子:行:11列:5
第29个格子:行:11列:6
第30个格子:行:11列:7
第31个格子:行:11列:8
第32个格子:行:11列:9
第33个格子:行:11列:10

2.2selectionMode=CellSelect

case1:

框选单元格集合元素顺序

当前单元格3--4
选中单元格数9
第1个格子:行:3列:4
第2个格子:行:2列:4
第3个格子:行:1列:4
第4个格子:行:3列:3
第5个格子:行:3列:2
第6个格子:行:2列:3
第7个格子:行:1列:3
第8个格子:行:2列:2
第9个格子:行:1列:2

case2:

框选单元格集合元素顺序

当前单元格5--2
选中单元格数6
第1个格子:行:5列:2
第2个格子:行:4列:2
第3个格子:行:3列:2
第4个格子:行:2列:2
第5个格子:行:1列:2
第6个格子:行:0列:2

case3:

框选单元格集合元素顺序

当前单元格6--4
选中单元格数10
第1个格子:行:6列:5
第2个格子:行:6列:4
第3个格子:行:7列:5
第4个格子:行:7列:4
第5个格子:行:10列:4
第6个格子:行:9列:4
第7个格子:行:8列:4
第8个格子:行:8列:5
第9个格子:行:9列:5
第10个格子:行:10列:5

case4:

框选单元格集合元素顺序

当前单元格7--5
选中单元格数6
第1个格子:行:7列:5
第2个格子:行:8列:5
第3个格子:行:9列:5
第4个格子:行:10列:5
第5个格子:行:11列:5
第6个格子:行:12列:5

case5:Ctr键+鼠标点选

框选单元格集合元素顺序

当前单元格0--4
选中单元格数7
第1个格子:行:0列:4
第2个格子:行:15列:5
第3个格子:行:12列:2
第4个格子:行:2列:8
第5个格子:行:8列:5
第6个格子:行:5列:3
第7个格子:行:3列:2

case7:Shift+鼠标点选

框选单元格集合元素顺序

当前单元格8--2
选中单元格数8
第1个格子:行:8列:2
第2个格子:行:7列:2
第3个格子:行:6列:2
第4个格子:行:5列:2
第5个格子:行:4列:2
第6个格子:行:3列:2
第7个格子:行:2列:2
第8个格子:行:1列:2

case7:Shift+鼠标点选

框选单元格集合元素顺序

当前单元格7--4
选中单元格数12
第1个格子:行:7列:4
第2个格子:行:6列:4
第3个格子:行:5列:4
第4个格子:行:7列:3
第5个格子:行:6列:3
第6个格子:行:5列:3
第7个格子:行:7列:2
第8个格子:行:6列:2
第9个格子:行:5列:2
第10个格子:行:4列:4
第11个格子:行:4列:3
第12个?褡樱盒?4列:2

总结

选中单元格在集合中添加顺序并无明显的规律,博客中有人建议通过选中单元格集合第一个与最后一个元素的行列来确定选中的区域内元素,可见通过上面的实验,这种做法显然是错误的。

解决思路:

1、可以遍历单元格集合对其中元素位置按照先行后列的顺序重新排位,再遍历单元格获取单元格值进行拼接到剪切板。但此法再数据量大时效率应该比较低。

WinForm中DataGridView复制选中单元格内容解决方案的更多相关文章

  1. winform中dataGridView单元格根据值设置新值,彻底解决绑定后数据类型转换的困难

    // winform中dataGridView单元格在数据绑定后,数据类型更改困难,只能迂回实现.有时候需要将数字变换为不同的文字描述,就会出现int32到string类型转换的异常,借助CellFo ...

  2. DataGridView中实现点击单元格Cell动态添加自定义控件

    场景 鼠标点击DataGridView的某个单元格时,此单元格添加一个自定义的控件,这里以 添加下拉框为例 效果 注: 博客主页: https://blog.csdn.net/badao_liuman ...

  3. EXCEL中统计单元格内容出现次数

    参考网站: https://jingyan.baidu.com/article/7c6fb428dfcc9580642c90ae.html 统计单元格内容出现次数是工作中经常会涉及到的问题. 那么,如 ...

  4. XAF 如何从Excel复制多个单元格内容到GridView(收藏)

    XAF 如何从Excel复制多个单元格内容到GridView 2012年04月11日 ⁄ 综合 ⁄ 共 10998字 ⁄ 字号 小 中 大 ⁄ 评论关闭 how to paste some excel ...

  5. js实现表格中不同单元格内容的替换(不同浏览器的节点属性兼容问题)

      ------->   效果:点击右下角单元格,左下角单元格内容被替换成和左上角相同,如上图所示. 实现方式:分别获取各个节点,并将左边节点的内容修改成左上方节点的内容. 代码: 注意的地方: ...

  6. EasyUI Datagrid 鼠标悬停显示单元格内容 复制代码

    EasyUI Datagrid 鼠标悬停显示单元格内容 ,halign:, align: 0 « 上一篇:LINQ to Entities 中的查询» 下一篇:去掉字符串中的非数字字符 posted ...

  7. EXCEL中,如何引用一个单元格中的数据,作为另一个单元格内容中的一部分?

    https://zhidao.baidu.com/question/230715654.html 假设单元格A1值是8(该值由函数计算得出),我要在单元格B1中引用A1的值,但只是作为B1单元格内容中 ...

  8. C# DataGridView在单元格提示里(ToolTip)显示完整的单元格内容

    当单元格内容太多时,则会忽略后面的内容 解决方案: 添加Dgv鼠标移到单元格事件时,设置当前单元格的ToolTipText属性内容为当前单元格内容 void From_Load(object send ...

  9. C# Winform中DataGridView的DataGridViewCheckBoxColumn使用方法

    下面介绍Winform中DataGridView的DataGridViewCheckBoxColumn使用方法: DataGridViewCheckBoxColumn CheckBox是否选中 在判断 ...

随机推荐

  1. win10安装docker 和 splash

    参考链接1:https://www.cnblogs.com/321lxl/p/9536616.html 参考链接2:https://blog.csdn.net/qq_18831501/article/ ...

  2. Golang中database/sql包

    驱动 github.com/go-sql-driver/mysql 请求一个连接的函数有好几种,执行完毕处理连接的方式稍有差别,大致如下: db.Ping() 调用完毕后会马上把连接返回给连接池. d ...

  3. js 实现弹性运动的简单应用----导航栏中弹性

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. vue-autoui自匹配webapi的UI控件

    vue-autoui 是一款基于vue和element扩展的一个自动化UI控件,它主要提供两个控件封装分别是auto-form和auto-grid; 通过这两个控件可以完成大多数的信息输入和查询输出的 ...

  5. vue-element-admin中是如何配置浏览器中的页面标题

    因为在vue-element-admin中杈哥是写个一个动态路由标题,就是说你点进那个页面,它会显示对应页面的标题,所以我们仅仅在index页面进行修改是没有用的,那么我们改如何修改呢? 找到perm ...

  6. 文件上传transferTo一行代码的bug

    本次的项目环境为 Running with Spring Boot v1.5.10.RELEASE, Spring v4.3.14.RELEASE, 服务器环境为CentOS7.0. transfer ...

  7. SpringBoot 集成MQTT配置

    目录 1. 前言 2. MQTT介绍 3. SpringBoot 集成MQTT 3.1 导入mqtt库 3.2 配置MQTT订阅者 3.3 配置MQTT发布者 3.4 MQTT消息处理和发送 3.4. ...

  8. 基于.NetCore3.1搭建项目系列 —— 使用Swagger做Api文档 (下篇)

    前言 回顾上一篇文章<使用Swagger做Api文档 >,文中介绍了在.net core 3.1中,利用Swagger轻量级框架,如何引入程序包,配置服务,注册中间件,一步一步的实现,最终 ...

  9. Shell 截取字符串方法

    原文链接 方法1 "${varible##*string}" 从左向右截取最后一个string后的字符串 e.g. exampleString="abc//888//ab ...

  10. 【WebGL】WebGL API 详解

    基于 WebGL Specifications 最全面的API释疑. 类型以及对象定义 这部分内容主要定义一部分类型和数据结构. typedef unsigned long GLenum; typed ...