C# WinForm:DataTable中数据复制粘贴操作的实现
1. 需要实现类似于Excel的功能,就是在任意位置选中鼠标起点和终点所连对角线所在的矩形,进行复制粘贴。
2. 要实现这个功能,首先需要获取鼠标起点和终点点击的位置。
3. 所以通过GridView(我用的是dev这款插件)的MouseDown和MouseUp事件来获取这连个位置。MouseDown获得鼠标左键按下时的所在的行列信息,MouseUp获得鼠标左键抬起时的行列信息。然后简单加减法计算一共选中的行数和列数。
有了这个思路代码其实挺简单的。今天没时间了,明天贴代码。
----------------------------------------------------------------------------------------------
粘贴部分的代码
- try
- {
- string pasteText = Clipboard.GetText().Replace("\r\n", "@").TrimEnd('@');//得到剪切板里的信息
- string[] Row = pasteText.Split('@');//分割的行数数组
- string[] col = Row[].Replace("\t", "#").TrimEnd('#').Split('#');//列数数组
- //判断是否存在非数字类型
- Regex rgx = new Regex(@"^[-]?\d+[.]?\d*$");
- for (int t = ; t < Row.Length; t++)
- {
- col = Row[t].Replace("\t", "#").TrimEnd('#').Split('#');
- for (int t1 = ; t1 < col.Length; t1++)
- {
- //判断字符串
- if (!rgx.IsMatch(col[t1].ToString().Trim()))
- {
- XtraMessageBox.Show("粘贴的内容存在非数字类型!");
- return;
- }
- }
- }
- int _iRowCount = gridRowHandleEnd - gridRowHandleStar + ;//一共选择的行数
- int _iColCount = gridColHandleEnd - gridColHandleStar + ;//一共选择的列数
- for (int r = ; r < Row.Length; r++)
- {
- //获取每行中的内容
- string rowMessage = Row[r].Replace("\t", "#").TrimEnd('#');
- col = rowMessage.Split('#');
- DataRow dr = dtInputSurveyData.Rows[gridRowHandleStar + r];//r是从0开始的,gridRowHandleStar+r的作用等同于gridRowHandleStar++
- //判断外部复制内容的列数GridView中选中内容的列数的大小,最终粘贴内容的列数应与小的相同;
- if (_iColCount < col.Length)
- {
- for (int i = ; i < _iColCount; i++)
- {
- dr[gridColHandleStar + i] = col[i];
- }
- }
- else
- {
- for (int i = ; i < col.Length; i++)
- {
- dr[gridColHandleStar + i] = col[i];
- }
- }
- }
- }
- catch (Exception ex)
- {
- XtraMessageBox.Show(ex.Message, Properties.Resources.ErrorTitle);
- }
还需要在gridview的MouseDown和MouseUp事件中添加代码来获取鼠标按下和抬起时的位置(我这里用的是dev这款插件,所以我这里的gridview是gridcontrol 下的gridview)。
MouseDown:
- try
- {
- //当鼠标按下时获取当前点击cell的位置信息
- GridHitInfo _gridHI = gvInputSurveyData.CalcHitInfo(e.Location);
- if (e.Button == MouseButtons.Left && _gridHI.RowHandle >= )
- {
- gridColHandleStar = _gridHI.Column.ColumnHandle;
- gridRowHandleStar = _gridHI.RowHandle;
- }
- }
- catch (Exception ex)
- {
- XtraMessageBox.Show(ex.Message, Properties.Resources.ErrorTitle);
- }
MouseUp:
- GridHitInfo _gridHI = gvInputSurveyData.CalcHitInfo(e.Location);
- if (e.Button == MouseButtons.Left && _gridHI.RowHandle >= )
- {
- gridColHandleEnd = _gridHI.Column.ColumnHandle;
- gridRowHandleEnd = _gridHI.RowHandle;
- }
这里两个Start 变量和两个end变量都是全局的,用来保存鼠标起始和终止的行列信息。
感谢您的阅读,不足之处请见谅。期待与您在评论区交流。
C# WinForm:DataTable中数据复制粘贴操作的实现的更多相关文章
- Android中的复制粘贴
Android中的复制粘贴 The Clipboard Framework 当使用clipboard framework时,把数据放在一个剪切对象(clip object)里,然后这个对象会放在系统的 ...
- Excel 2010 如何将筛选后的数据复制粘贴到另一个工作表筛选后的表格里
如果你是指自动筛选后,把筛选数据复制/粘贴到另外一个工作表中,不妨试试试 第一步选中筛选后的数据区域:第二步执行菜单命令“编辑/定位/定位条件/可见单元格”,确定:第三步单击复制按钮或者Ctrl+C或 ...
- Ubuntu的复制粘贴操作及常用快捷键(摘自网络)
Ubuntu的复制粘贴操作 终端最大化快捷键:crtl + win + 上 1.最为简单,最为常用的应该是鼠标右键操作了,可以选中文件,字符等,右键鼠标,复制,到目的地右键鼠标,粘贴就结束了. 2.快 ...
- ubuntu18.04下取消中键复制粘贴功能
Q: armlinux开发,主机采用ubuntu18.04操作系统,使用过程中关于鼠标中键有如下操作现象, 操作: 1.选中文本, 2.将鼠标光标定位到要插入的位置 3.按下鼠标中键 现象:将自动复制 ...
- 在CMD命令行和PowerShell中实现复制粘贴功能
在CMD命令行和PowerShell中实现复制粘贴功能 常常使用命令行或者PowerShell的朋友肯定会遇到这样的情况:粘贴文本非常easy,右键--选择粘贴就可以,可是想要复制命令 ...
- [转]怎样在cmd(命令提示符)下进行复制粘贴操作
原文链接:http://jingyan.baidu.com/article/93f9803fd3a4dde0e46f55f5.html cmd下复制粘贴的快捷操作方式 工具/原料 系统cmd 步骤/方 ...
- Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法
最近在MyEclipse中编辑代码时,使用快捷键进行复制粘贴,经常会导致编辑器短暂的停顿,光标不跟随,居然反应不过来,几近假死. 想来想去应该是编辑上的什么配置或者是IDE的什么功能导致,于是进入Pr ...
- C#把DataTable中数据一次插入数据库的方法
现在实际的情况是这样的: 客户有一台打卡机,员工打卡的信息全部储存在打卡机的Access数据库里面,现在客户引入了一种新的管理系统,需要将Access数据库中的打卡数据同步到SQL Server数据库 ...
- SqlServer将表中数据复制到另一张表
insert into phone2(ph,attr,type,carrier) select top 1000 ph,attr,type,carrier from phone 将表phone的字段和 ...
随机推荐
- selenium模块
一 介绍 二 安装 三 基本使用 四 选择器 五 等待元素被夹在 元素交互操作 其他 项目联 一 介绍 selenium最初是一个自动化测试的工具,而爬虫中使用它主要是为了解决requests无法直接 ...
- 看我如何粘贴别人代码--socketserver
源码执行流程 自己模仿一个(提取代码) 服务器类 import socket import threading import selectors class TCPServer: def __init ...
- OPENSSL_Applink 错误
原因 : 程序太老, 调用了参数为 FILE * 类型的 api. 解决方式: 1. windows exe, 可直接#include<openssl/applink.c> // ext ...
- Android 8.0 无法收到broadcast
参见此页 https://commonsware.com/blog/2017/04/11/android-o-implicit-broadcast-ban.html 目前最简单的方法就是:把targe ...
- eclipse下properties文件中文乱码的解决方案
今天在工程下编辑.properties文件时输入了中文然后就保存出错,弄了好久才搞定!大家瞄瞄 在中文操作系统下,Eclipse中的Java类型文件的编码的默认设置是GBK,但是对Properties ...
- foot
码云链接:https://gitee.com/zyyyyyyyyyyy/codes/rcfdzmin4a82v975pl1ko47 效果图: 原网站截图: 源代码: <!DOCTYPE html ...
- MySQL-连表查询联系
链接 1.将老师的姓名和所教课程罗列出来 SELECT teacher_id,tname,cname FROM course LEFT JOIN teacher ON course.`teacher_ ...
- django信号浅谈
Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1.Django内置信号 Model signals pre_in ...
- word2vec并行实现小记
word2vec能将文本中出现的词向量化,其原理建立在Mikolov的博士论文成果及其在谷歌的研究经验的基础上.与潜在语义分析(Latent Semantic Index, LSI).潜在狄立克雷分配 ...
- Loda Button
当从服务器获取数据时,这个简单的jQuery插件会动画按钮的图标.(单击上面的按钮进行演示 - 超时2秒模仿服务器负载). 按钮的标记很简单: HTML <a href="#" ...