博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#如何实现DataGridView到DataGridView的拖拽
阅读量:6258 次
发布时间:2019-06-22

本文共 1797 字,大约阅读时间需要 5 分钟。

今天工作中遇到一个问题,需要将一个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
,如需转载请自行联系原作者
你可能感兴趣的文章
Django 文件下载功能
查看>>
走红日本 阿里云如何能够赢得海外荣耀
查看>>
qt 学习之路2
查看>>
线上应用故障排查之二:高内存占用
查看>>
异常处理汇总 ~ 修正果带着你的Code飞奔吧!
查看>>
PCIE_DMA:xapp1052学习笔记
查看>>
python ----字符串基础练习题30道
查看>>
uva-10879-因数分解
查看>>
python 调用aiohttp
查看>>
linux下文件的一些文件颜色的含义
查看>>
跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
查看>>
学习鸟哥的Linux私房菜笔记(8)——文件查找与文件管理2
查看>>
升级fedora 18到fedora 19
查看>>
11月20日学习内容整理:jquery插件
查看>>
SVN与TortoiseSVN实战:补丁详解
查看>>
获取页面中所有dropdownlist类型控件
查看>>
读《淘宝数据魔方技术架构解析》有感
查看>>
[转载]如何破解Excel VBA密码
查看>>
【BZOJ】2563: 阿狸和桃子的游戏
查看>>
redis 中文字符显示
查看>>