【WinForm+DevExpress】GridView 在两个表格之间拖拽行

2024-05-31 22:08

本文主要是介绍【WinForm+DevExpress】GridView 在两个表格之间拖拽行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果图

可以将左边的行数据拖拽到右边,或者是将右边的行数据拖拽到左边

实现:

第一步:

新加两个GridControl,为他们设置数据源,并且将两个GridControl的AllowDrop属性设置为True

 private void DragDemo_Load(object sender, EventArgs e){FillData();}
private void FillData(){//左边的网格默认查出tb_order表中的所有数据string gridView1sql1 = "select orderName from tb_order";//右边的网格默认不显示数据string gridView1sql2 = "select orderName from tb_order where 1=2";gridControl1.DataSource = GetDataSource(gridView1sql1);gridControl2.DataSource = GetDataSource(gridView1sql2);}}private DataTable GetDataSource(string sql){SqlDataAdapter da = new SqlDataAdapter(sql, DBConst.DBConnectionString);DataTable dt = new System.Data.DataTable();da.Fill(dt);return dt;}

第二步:添加四个方法:

//鼠标拖拽过程事件private void gridControl_DragOver(object sender, DragEventArgs e){e.Effect = DragDropEffects.Move;GridControl grid = sender as GridControl;if (grid == null) return;GridView view = grid.FocusedView as GridView;//GridView如果有分组,则展开所有分组数据if (view.GroupCount != 0)view.ExpandAllGroups();}//鼠标按下事件private void gridView_MouseDown(object sender, MouseEventArgs e){GridView view = sender as GridView;downHitInfo = null;GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y));//鼠标左键按下去时在GridView中的坐标if (Control.ModifierKeys != Keys.None) return;if (e.Button == MouseButtons.Left && hitInfo.RowHandle >= 0)downHitInfo = hitInfo;}//鼠标移动事件private void gridView_MouseMove(object sender, MouseEventArgs e){GridView view = sender as GridView;if (e.Button == MouseButtons.Left && downHitInfo != null)//不是左键则无效且鼠标左键按下去时需要在gridview区域中{Size dragSize = SystemInformation.DragSize;Rectangle dragRect = new Rectangle(new Point(downHitInfo.HitPoint.X - dragSize.Width / 2,downHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize);if (!dragRect.Contains(new Point(e.X, e.Y))){object row = view.GetRow(downHitInfo.RowHandle);if (row == null) return;view.GridControl.DoDragDrop(row, DragDropEffects.Move);downHitInfo = null;DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;}}}//拖拽完成后事件private void gridControl_DragDrop(object sender, DragEventArgs e){GridControl grid = sender as GridControl;DataTable table = grid.DataSource as DataTable;//获取选中行的数据DataRow row = ((DataRowView)e.Data.GetData(typeof(DataRowView))).Row;if (row != null && table != null && row.Table != table){table.ImportRow(row);row.Delete();}}

第三步:为两个GridControl绑定这4个方法

 this.gridControl1.DragDrop += new System.Windows.Forms.DragEventHandler(this.gridControl_DragDrop);this.gridControl1.DragOver += new System.Windows.Forms.DragEventHandler(this.gridControl_DragOver);this.gridView1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.gridView_MouseDown);this.gridView1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.gridView_MouseMove);
  this.gridView2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.gridView_MouseDown);this.gridView2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.gridView_MouseMove);this.gridControl2.DragDrop += new System.Windows.Forms.DragEventHandler(this.gridControl_DragDrop);this.gridControl2.DragOver += new System.Windows.Forms.DragEventHandler(this.gridControl_DragOver);

注意:

如果只需要实现左边的表格向右边的表格拖拽功能,只需要给gridView1添加MouseDown和MouseMove事件,给gridControl2添加DragDrop和DragOver事件

GitHub地址:

https://github.com/xiaoyonglu/DevExpressDemos

这篇关于【WinForm+DevExpress】GridView 在两个表格之间拖拽行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1019170

相关文章

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或

Python实现pdf电子发票信息提取到excel表格

《Python实现pdf电子发票信息提取到excel表格》这篇文章主要为大家详细介绍了如何使用Python实现pdf电子发票信息提取并保存到excel表格,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录应用场景详细代码步骤总结优化应用场景电子发票信息提取系统主要应用于以下场景:企业财务部门:需

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc