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事件:

复制代码
ExpandedBlockStart.gif Code
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);
                     }
               }
           }
       }
 }
复制代码

 

gridTarget的DragDrop事件:

复制代码
ExpandedBlockStart.gif Code
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));
             
//}
       }
}
复制代码

 

gridTarget的DragEnter事件:

ExpandedBlockStart.gif Code
private void gridTarget_DragEnter(object sender, DragEventArgs e)
{
     e.Effect 
= DragDropEffects.Copy;
}



   本文转自loose_went博客园博客,原文链接: http://www.cnblogs.com/michaelxu/archive/2009/09/27/1574905.html ,如需转载请自行联系原作者
相关文章
|
C# 数据库
C# DataGridView用法(—)代码绑定数据源
C# DataGridView用法(—)代码绑定数据源
432 1
|
5月前
|
存储 缓存 C#
46.c#:datagridview控件
46.c#:datagridview控件
75 1
|
5月前
|
SQL 数据库连接 数据库
C# | 将DataGridView中的数据保存到Accesss数据库
要将WinForm的DataGridView中的数据保存到Access数据库,可以按照本文的步骤进行。 在Visual Studio中,打开项目,右键单击“引用”文件夹,选择“添加引用”,在“COM”选项卡中找到并选中“Microsoft Office 14.0 Access Database Engine Object Library”,然后单击“确定”按钮。
226 0
C# | 将DataGridView中的数据保存到Accesss数据库
|
5月前
|
XML 存储 JSON
C# | DataGridView数据转存为Json、XML格式
DataGridView是常用的数据展示组件,而将其转存为Json或XML格式,则可以方便地进行数据的传输和存储。 Json格式具有轻量、易读、易解析等优点,广泛应用于Web开发、API接口传输等场景。 XML格式则具有良好的结构化特性,支持命名空间、数据类型等复杂数据表示方式,被广泛应用于数据交换、配置文件等领域。 因此,将DataGridView数据转存为Json、XML格式,不仅能够方便地进行数据的传输和存储,还能够满足不同场景下的数据需求。 本篇文章将介绍如何将DataGridView数据转存为Json、XML格式,并提供相应的代码示例。
163 0
C# | DataGridView数据转存为Json、XML格式
|
5月前
|
JSON C# 数据格式
C# | 使用DataGridView展示JSON数组
你想展示一个复杂的JSON数组数据吗?但是你却不知道该如何展示它,是吗?没问题,因为本文就是为解决这个问题而生的!使用DataGridView轻松地将JSON数组数据以表格的形式呈现出来,这样你就可以更加清晰地了解和处理数据了。 让我们一起来探索如何实现吧!
144 0
C# | 使用DataGridView展示JSON数组
|
5月前
|
XML JSON 数据处理
C# | 导出DataGridView中的数据到Excel、CSV、TXT
从DataGridView中导出数据到Excel、CSV、TXT是开发中非常常见的一种需求。本文将讲解如何高效的完成对这三种格式的单向导出。 倘若直接写三种格式的导出必定会产生大量的重复代码,而从表中获取结构化数据的思路是基本一致的,因此有一个思路是先将DataGridView中的数据转换为DataTable对象,再进一步导出成我们的目标格式。 本文将介绍如何将DataGridView中的数据转换为DataTable格式,并提供将DataTable转换为Excel、CSV、TXT三种格式的例子。
448 0
C# | 导出DataGridView中的数据到Excel、CSV、TXT
|
12月前
|
C#
C#之四十三 从DataGridView导出数据到Excel
C#之四十三 从DataGridView导出数据到Excel
84 0
|
C# 数据库
C#中的DataGridView中添加按钮并操作数据
C#中的DataGridView中添加按钮并操作数据
282 0
|
C#
C# 两个DataGridView设置时间范围,开始日期小于结束日期
C# 两个DataGridView设置时间范围,开始日期小于结束日期
96 0
|
数据库 C#
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作