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

  • 相关阅读:
    flask 基础
    新的项目部署
    linux (01) linux基础
    linux (04) linux安装mysql
    linux (06) redis安装
    linux (09) nginx反向代理,负载均衡
    linux (08) nginx入门详解
    linux (07) redis详解
    linux(05) 编译安装py3
    spring-boot war包部署(二)
  • 原文地址:https://www.cnblogs.com/kkun/p/1625623.html
Copyright © 2020-2023  润新知