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中数据复制粘贴操作的实现的更多相关文章

  1. Android中的复制粘贴

    Android中的复制粘贴 The Clipboard Framework 当使用clipboard framework时,把数据放在一个剪切对象(clip object)里,然后这个对象会放在系统的 ...

  2. Excel 2010 如何将筛选后的数据复制粘贴到另一个工作表筛选后的表格里

    如果你是指自动筛选后,把筛选数据复制/粘贴到另外一个工作表中,不妨试试试 第一步选中筛选后的数据区域:第二步执行菜单命令“编辑/定位/定位条件/可见单元格”,确定:第三步单击复制按钮或者Ctrl+C或 ...

  3. Ubuntu的复制粘贴操作及常用快捷键(摘自网络)

    Ubuntu的复制粘贴操作 终端最大化快捷键:crtl + win + 上 1.最为简单,最为常用的应该是鼠标右键操作了,可以选中文件,字符等,右键鼠标,复制,到目的地右键鼠标,粘贴就结束了. 2.快 ...

  4. ubuntu18.04下取消中键复制粘贴功能

    Q: armlinux开发,主机采用ubuntu18.04操作系统,使用过程中关于鼠标中键有如下操作现象, 操作: 1.选中文本, 2.将鼠标光标定位到要插入的位置 3.按下鼠标中键 现象:将自动复制 ...

  5. 在CMD命令行和PowerShell中实现复制粘贴功能

    在CMD命令行和PowerShell中实现复制粘贴功能         常常使用命令行或者PowerShell的朋友肯定会遇到这样的情况:粘贴文本非常easy,右键--选择粘贴就可以,可是想要复制命令 ...

  6. [转]怎样在cmd(命令提示符)下进行复制粘贴操作

    原文链接:http://jingyan.baidu.com/article/93f9803fd3a4dde0e46f55f5.html cmd下复制粘贴的快捷操作方式 工具/原料 系统cmd 步骤/方 ...

  7. Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法

    最近在MyEclipse中编辑代码时,使用快捷键进行复制粘贴,经常会导致编辑器短暂的停顿,光标不跟随,居然反应不过来,几近假死. 想来想去应该是编辑上的什么配置或者是IDE的什么功能导致,于是进入Pr ...

  8. C#把DataTable中数据一次插入数据库的方法

    现在实际的情况是这样的: 客户有一台打卡机,员工打卡的信息全部储存在打卡机的Access数据库里面,现在客户引入了一种新的管理系统,需要将Access数据库中的打卡数据同步到SQL Server数据库 ...

  9. SqlServer将表中数据复制到另一张表

    insert into phone2(ph,attr,type,carrier) select top 1000 ph,attr,type,carrier from phone 将表phone的字段和 ...

随机推荐

  1. 01pxc集群的部署

    尽可能的控制pxc集群的规模,pxc集群节点越多,数据同步的速度就越慢 所有pxc节点的硬件配置最好相同,pxc集群数据同步的速度取决于配置最低的节点 Pxc集群只支持innodb引擎 安装pxc集群 ...

  2. TensorFlow object detection API

    cloud执行:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_pet ...

  3. python之地基(三)

    一.引用计数和垃圾回收机制 当一个执行程序完毕后,回收变量所占据的内存. 当引用计数变为0的时候,回收变量所占据的内存. a=100 print(id(a)) a=input('==>:') # ...

  4. pip安装mysql-python报错:Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-enRreC/mysql-python/

    公司业务开发,用python开发网站;需要使用模块MySQLdb. 我直接pip install MySQLdb,当然不成功了,模块名字因该是mysql-python pip install mysq ...

  5. 使用Jenkins时,如果GIT_COMMIT无变化,跳过构建

    使用Jenkins时,如果GIT_COMMIT无变化,跳过构建    使用插件: conditional-buildstep A buildstep wrapping any number of ot ...

  6. Topshelf的使用

    一.简介 Topshelf可用于创建和管理Windows服务.其优势在于不需要创建windows服务,创建控制台程序就可以.便于调试. 二.官方地址: 1.官网:http://topshelf-pro ...

  7. Rafy 框架 - 时间戳插件

    本文将解释 Rafy 框架中的时间戳插件的场景.使用方法.原理. 场景 在开发各类数据库应用系统时,业务领域实体往往需要包含"创建时间"."最后更新时间".&q ...

  8. Flink+kafka实现Wordcount实时计算

    1. Flink Flink介绍: Flink 是一个针对流数据和批数据的分布式处理引擎.它主要是由 Java 代码实现.目前主要还是依靠开源社区的贡献而发展.对 Flink 而言,其所要处理的主要场 ...

  9. zabbix-tomcat监控

    安装tomcat 1安装jdk # yum install lrzsz -y #tar xvf jdk # ln -sv /usr/local/src/jdk1..0_79/ /usr/local/j ...

  10. 三、自动化测试平台搭建-django-如何用mysql数据库做web项目

    从这节开始到后面说的大概内容如下: 这里说的是Django做一个web项目的大概框架,从下篇具体说Django中的模型(查询..),视图(请求,响应,cookie,session..),模板(验证码, ...