DevExpress控件学习之GridControl的Row拖拽

GridControl中包括了GridView,所以在工具栏是无法直接找到GridView控件的
image
需要实现两个控件的四个事件,分别是源控件和目标控件,源控件即为某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注意加粗部分代码,相关参考点此连接

posted @ 2009-12-16 15:11  kkun  阅读(5656)  评论(0编辑  收藏  举报