DevExpress控件学习之GridControl的Row拖拽
GridControl中包括了GridView,所以在工具栏是无法直接找到GridView控件的
需要实现两个控件的四个事件,分别是源控件和目标控件,源控件即为某GridControl实例的子视图->GridView
目标控件为任意~
先给出处来,本文参考自:http://www.devexpress.com/Support/Center/KB/p/A1444.aspx
上边那个地址比较慢
源控件的两个事件,MouseDown和MouseMove,再加一个公有变量保存被拖拽的对象,此例中使用GridHitInfo对象
注意:确保实现的是GridView1的两个事件,而不是GridControl的两个事件,如上图所示,先选中gridView1再在属性窗口中注册事件
MouseDown和MouseMove事件中分别写如下代码
//公共变量,存放要拖拽的对象 GridHitInfo downHitInfo = null; //鼠标按下事件 private void gridView1_MouseDown( object sender, MouseEventArgs e ) { GridView view = sender as GridView; downHitInfo = null; GridHitInfo hitInfo = view.CalcHitInfo( new Point( e.X, e.Y ) ); if( Control.ModifierKeys != Keys.None ) return; if( e.Button == MouseButtons.Left && hitInfo.RowHandle >= 0 ) downHitInfo = hitInfo; } //鼠标移动事件 private void gridView1_MouseMove( object sender, MouseEventArgs e ) { GridView view = sender as GridView; if( e.Button == MouseButtons.Left && downHitInfo != null ) { 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 ); view.GridControl.DoDragDrop( row, DragDropEffects.Move ); downHitInfo = null; DevExpress.Utils.DXMouseEventArgs.GetMouseArgs( e ).Handled = true; } } }
目标控件中也需要实现两个事件及一个属性,分别为DragOver,DragDrop两个事件和AllowDrop属性,代码如下:
//将对象拖过对象边界时触发 private void xtraTabControl1_DragOver( object sender, DragEventArgs e ) { e.Effect = DragDropEffects.Move; } //拖放完成后,相关数据的处理,如删除源控件中的ROW及目标控件中新增一行等,略 private void xtraTabControl1_DragDrop( object sender, DragEventArgs e ) { }
注意:以上示例的使用的结构化的数据如DataSet,DataTable等,如果你是自定义的数据集合,则需要使用GetRow,否则使用GetDataRow注意加粗部分代码,相关参考点此连接
------------------------------------------
除非特别声明,文章均为原创,版权与博客园共有,转载请保留出处
BUY ME COFFEE


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架