[转帖]C#如何实现DataGridView到DataGridView的拖拽
今天工作中遇到一个问题,需要将一个DataGridView中的某一行拖拽到另一个DataGridView中,在网上搜了一遍,大多是从DataGridView拖拽到TextBox等控件,没有拖拽到DataGridView中的。拖拽到TextBox很容易,但拖拽到DataGridView就有一个问题:如何决定拖拽到DataGridView中的哪一个Cell?
为此研究了两个小时,终于找到了答案。
例如要实现从gridSource到gridTarget的拖拽,需要一个设置和三个事件:
1、设置gridTarget的属性AllowDrop为True
2、实现gridSource的MouseDown事件,在这里进行要拖拽的Cell内容的保存,保存到剪贴板。
3、实现gridTarget的DragDrop和DragEnter事件,DragDrop事件中的一个难点就是决定拖拽到哪一个Cell
代码如下:
gridSource的MouseDown事件:
private void gridSource_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
DataGridView.HitTestInfo info = this.gridSource.HitTest(e.X, e.Y);
if (info.RowIndex >= 0)
{
if (info.RowIndex >= 0 && info.ColumnIndex >= 0)
{
string text = (String)this.gridSource.Rows[info.RowIndex].Cells[info.ColumnIndex].Value;
if (text != null)
{
this.gridSource.DoDragDrop(text, DragDropEffects.Copy);
}
}
}
}
}
{
if (e.Button == MouseButtons.Left)
{
DataGridView.HitTestInfo info = this.gridSource.HitTest(e.X, e.Y);
if (info.RowIndex >= 0)
{
if (info.RowIndex >= 0 && info.ColumnIndex >= 0)
{
string text = (String)this.gridSource.Rows[info.RowIndex].Cells[info.ColumnIndex].Value;
if (text != null)
{
this.gridSource.DoDragDrop(text, DragDropEffects.Copy);
}
}
}
}
}
gridTarget的DragDrop事件:
private void gridTarget_DragDrop(object sender, DragEventArgs e)
{
//得到要拖拽到的位置
Point p = this.gridTarget.PointToClient(new Point(e.X, e.Y));
DataGridView.HitTestInfo hit = this.gridTarget.HitTest(p.X, p.Y);
if (hit.Type == DataGridViewHitTestType.Cell)
{
DataGridViewCell clickedCell = this.gridTarget.Rows[hit.RowIndex].Cells[hit.ColumnIndex];
clickedCell.Value = (System.String)e.Data.GetData(typeof(System.String));
//如果只想允许拖拽到某一个特定列,比如Target Field Expression,则先要判断列是否为Target Field Expression,如下:
//if (0 == string.Compare(clickedCell.OwningColumn.Name, "Target Field Expression"))
//{
// clickedCell.Value = (System.String)e.Data.GetData(typeof(System.String));
//}
}
}
{
//得到要拖拽到的位置
Point p = this.gridTarget.PointToClient(new Point(e.X, e.Y));
DataGridView.HitTestInfo hit = this.gridTarget.HitTest(p.X, p.Y);
if (hit.Type == DataGridViewHitTestType.Cell)
{
DataGridViewCell clickedCell = this.gridTarget.Rows[hit.RowIndex].Cells[hit.ColumnIndex];
clickedCell.Value = (System.String)e.Data.GetData(typeof(System.String));
//如果只想允许拖拽到某一个特定列,比如Target Field Expression,则先要判断列是否为Target Field Expression,如下:
//if (0 == string.Compare(clickedCell.OwningColumn.Name, "Target Field Expression"))
//{
// clickedCell.Value = (System.String)e.Data.GetData(typeof(System.String));
//}
}
}
gridTarget的DragEnter事件:
private void gridTarget_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
{
e.Effect = DragDropEffects.Copy;
}
本文转自:http://www.cnblogs.com/michaelxu/archive/2009/09/27/1574905.html
本文来源:
参考文档:
[转帖]FreeTextBox添加自定义按钮
C# DataGridView定位记录,设置焦点行
DataGridView绑定List 对象,偶尔出现索引 |1 没有值|C/S开发框架
C# DataGridView 隐藏默认 * 行|C/S开发框架
C# DataGridView组件自动添加弹出菜单(ContextMenuStrip)复制单元格的值
C# Winform DataGridView设置选定的区域为不可编辑
C# DataGridView 自动给新增记录当前单元格赋值
CS开发框架如何实现快速开发?
[转帖]ACTIVE OBJECT 模式
[转帖]C# const和static readonly有什么区别?
[转帖]C#如何调用非托管函数(三)-实现回调函数
[转帖]C#如何调用非托管函数(二)-传递结构和类
[转帖]C#如何调用非托管函数(一)
C# 数据窗体实现增删改查(CRUD)源码下载(原)
C#.NET TreeView拖拽功能(Drag,Drop)
使用.NET8/EFCore访问达梦数据库|C/S框架网|C/S开发框架
[转帖]FreeTextBox添加自定义按钮
C# DataGridView定位记录,设置焦点行
DataGridView绑定List 对象,偶尔出现索引 |1 没有值|C/S开发框架
C# DataGridView 隐藏默认 * 行|C/S开发框架
C# DataGridView组件自动添加弹出菜单(ContextMenuStrip)复制单元格的值
C# Winform DataGridView设置选定的区域为不可编辑
C# DataGridView 自动给新增记录当前单元格赋值
CS开发框架如何实现快速开发?
[转帖]ACTIVE OBJECT 模式
[转帖]C# const和static readonly有什么区别?
[转帖]C#如何调用非托管函数(三)-实现回调函数
[转帖]C#如何调用非托管函数(二)-传递结构和类
[转帖]C#如何调用非托管函数(一)
C# 数据窗体实现增删改查(CRUD)源码下载(原)
C#.NET TreeView拖拽功能(Drag,Drop)
使用.NET8/EFCore访问达梦数据库|C/S框架网|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
