【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

相关文章

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

Java利用poi实现word表格转excel

《Java利用poi实现word表格转excel》这篇文章主要为大家详细介绍了Java如何利用poi实现word表格转excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、每行对象类需要针对不同的表格进行对应的创建。package org.example.wordToEx

Python实现PDF与多种图片格式之间互转(PNG, JPG, BMP, EMF, SVG)

《Python实现PDF与多种图片格式之间互转(PNG,JPG,BMP,EMF,SVG)》PDF和图片是我们日常生活和工作中常用的文件格式,有时候,我们可能需要将PDF和图片进行格式互转来满足... 目录一、介绍二、安装python库三、Python实现多种图片格式转PDF1、单张图片转换为PDF2、多张图

使用EasyExcel实现简单的Excel表格解析操作

《使用EasyExcel实现简单的Excel表格解析操作》:本文主要介绍如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,感兴... 目录前言固定模板及表数据格式的解析实现Excel模板内容对应的实体类实现AnalysisEventLis

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一