【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

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

O(n)时间内对[0..n^-1]之间的n个数排序

题目 如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序 思路 把整数转换为n进制再排序,每个数有两位,每位的取值范围是[0..n-1],再进行基数排序 代码 #include <iostream>#include <cmath>using namespace std;int n, radix, length_A, digit = 2;void Print(int *A,

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

关于使用cspreadsheet读写EXCEL表格数据的问题

前几天项目有读写EXCEL表格的需求,我就找了大概有几种,大致分为:COM方法、ODBC方法、OLE方法、纯底层格式分析方法。由于COM方法要求必须安装有OFFICE的EXCEL组件,纯底层格式分析方法又很多功能需要自行去完善,所有最终选择了数据库的方法,用数据库的方法去存取xls格式的数据。网上有一个高手写的CSpreedSheet,看了一下提供的接口,感觉挺好用的。在使用的过程中发现几个

16 子组件和父组件之间传值

划重点 子组件 / 父组件 定义组件中:props 的使用组件中:data 的使用(有 return 返回值) ; 区别:Vue中的data (没有返回值);组件方法中 emit 的使用:emit:英文原意是:触发、发射 的意思components :直接在Vue的方法中声明和绑定要使用的组件 小炒肉:温馨可口 <!DOCTYPE html><html lang="en"><head><