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注意加粗部分代码,相关参考点此连接