zoukankan      html  css  js  c++  java
  • 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注意加粗部分代码,相关参考点此连接

  • 相关阅读:
    vue框架,后端框架选型
    appium,元素定位和元素操作,使用uiautomatorviewer
    appium,参数化,数据驱动
    Qt 应用程序无法正常启动0xc000007b
    NOI2021 游记
    NOI 2021 游记
    NOI2021 看台风记
    NOI2021 部分题目题解
    NOI2021游记
    vectorized case branch
  • 原文地址:https://www.cnblogs.com/kkun/p/1625623.html
Copyright © 2011-2022 走看看