首先,添加引用:using DevExpress.XtraGrid.Views.Grid.ViewInfo; 
 
           gridControl1.AllowDrop = true; // 确保能够拖拽
              gridView1.OptionsSelection.MultiSelect = true;     //确保能够多选
            gridView1.OptionsSelection.EnableAppearanceFocusedCell = false; //确保选定行的背景色一样。
            gridView1.OptionsBehavior.Editable = false;  
            gridView1.OptionsBehavior.ReadOnly = true;
           上述初始化最好放在赋数据源之前。否则数据一开始显示的时候没有选中行。
        //GridHitInfo根据鼠标点击的x、y坐标获取该点的相关信息
        private GridHitInfo downHitInfo;  
        private GridHitInfo upHitInfo;
触发事件:
 
        //鼠标按下事件
        private void gridView1_MouseDown(object sender, MouseEventArgs e)
        {
            downHitInfo = gridView1.CalcHitInfo(new Point(e.X,e.Y));
        }
       //鼠标移动事件
        private void gridView1_MouseMove(object sender, MouseEventArgs e)        {
            if (e.Button != MouseButtons.Left) return;        //判断是否是左键
            if (downHitInfo == null||downHitInfo.RowHandle <0) return;   //判断按下的位置是否有值,是否是gridview 的Items.

             int[] rows =gridView1.GetSelectedRows();
             List<XESHI > row = new List<XESHI >();
             foreach (int r in rows)   // 获取gridview 数据源中对应的信息。
             {
                 //根据 gridview 中的行索引获取数据源中对应的是行索引
                 int dataSourcerows = gridView1.GetDataSourceRowIndex(r);

row.Add(asd[dataSourcerows]);
             }
             gridControl1.DoDragDrop(row, DragDropEffects.Move);//开始拖放操作。
        }

        private void gridControl1_DragDrop(object sender, DragEventArgs e)

{

            //获取鼠标在屏幕上的位置。
            Point gridviewPoint = this.PointToScreen (this.gridControl1.Location  );  
            //获取 gridview 中对应的的位置(屏幕位置减去 gridView 开始位置)
            upHitInfo = gridView1.CalcHitInfo(new Point(e.X - gridviewPoint.X, e.Y - gridviewPoint.Y));  
              if (upHitInfo == null ||
upHitInfo.RowHandle < 0) return;
            //获取释放的位置列索引
            int endRow =gridView1.GetDataSourceRowIndex ( gridView1.GetDataSourceRowIndex(upHitInfo.RowHandle));   
           
            List<XESHI> row = e.Data.GetData(typeof(List<XESHI>)) as List<XESHI>;  //获取要移动的数据
            if (row != null && row.Count > 0) //没有移动的数据跳过
            {
                int a;
                //获取移动列集合的第一列在数据源的索引

int startRow = asd.IndexOf(row[0]);

                XESHI xs = asd[endRow];
                if (!row.Contains(xs))  //如果多选的话,确保不能拖拽到这几个里
                {
                    gridView1.ClearSelection();
                    //排序,先删除后后添加,
                    for (int i = 0; i < row.Count; i++)
                        asd.Remove(row[i]);
                    //若果往上托,则加在鼠标到达行的上面
                    //如果往下拖,则加在鼠标到达行的下面
                    if (startRow > endRow)
                        a = asd.IndexOf(xs);
                    else
                        a = asd.IndexOf(xs) + 1;

for (int i = 0; i < row.Count; i++)
                    {
                        asd.Insert(a + i, row[i]);
                        gridView1.SelectRow(a + i);
                    }
                    gridView1.FocusedRowHandle = a;
                }

}
            gridControl1.DataSource = asd;
            gridView1.RefreshData();
        }

 
 
        private void gridControl1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }
 
 
 
 
程序中用到的一些类:
 public class XESHI
    {
        public string Name
{ get; set;
}
        public string Xinshui
{ get; set;
}
    }
 List<XESHI> asd = new List<XESHI>();

devpress 的gridview 控件的行拖拽 z的更多相关文章

  1. jqGrid选择列控件向右拖拽超出边界处理

    jqGrid选择列控件向右拖拽超出边界处理 $("#tb_DeviceInfo").jqGrid('navButtonAdd', '#jqGridPager', {         ...

  2. 让一个view 或者控件不支持拖拽

    让一个view 或者控件不支持拖拽: dragView.userInteractionEnabled = NO;

  3. WPF 在image控件用鼠标拖拽出矩形

    原文:WPF 在image控件用鼠标拖拽出矩形 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee ...

  4. 2018-11-19-WPF-在image控件用鼠标拖拽出矩形

    title author date CreateTime categories WPF 在image控件用鼠标拖拽出矩形 lindexi 2018-11-19 15:35:13 +0800 2018- ...

  5. ios-将代码创建的视图控件放入拖拽控件的下面

    如图所示 图片是拖拽上去的imageView,橘黄色控件是在代码中创建的添加上去的,此时黄色view在imageView 上方 调用方法bringSubviewToFront:试图将imageView ...

  6. win32 sdk树形控件的项拖拽实现

    本课中,我们将学习如何使用树型视图控件.另外还要学习如何在树型视图中完成拖-拉动作,以及如何使用图象列表. 理论: 树型视图是一种特别的窗口,我们可以使用它一目了然地表示某种层次关系.譬如象在资源管理 ...

  7. Winform中Picture控件图片的拖拽显示

    注解:最近做了一个小工具,在Winform中对Picture控件有一个需求,可以通过鼠标从外部拖拽图片到控件的上,释放鼠标,显示图片! 首先你需要对你的整个Fom窗口的AllowDrop设置Ture ...

  8. 让您的WinForm控件快速支持拖拽文件

    实现原理:使用扩展方法. /// <summary> /// 控件扩展 /// </summary> public static class ControlExt { /// ...

  9. GRIDVIEW 控件

    http://www.cnblogs.com/shanymen/archive/2009/05/22/1486654.html GridView控件是.net里的一个显示数据控件,该控件制作很人性化, ...

随机推荐

  1. oracle普通用户登录em

    刚新创建一个用户,登陆EM(Enterprise Manager) 如下提示: 应用程序要求的数据库权限超出了您当前具有的权限.有关特定版本的详细信息, 解决办法: 给登陆用户赋予 select_ca ...

  2. TYVJ1338 QQ农场

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Sandytea前段时间沉迷于QQ农场中……一天夜里,他梦见来到好友X的农场上…… 描述 这个农场和游戏中略有 ...

  3. WIN10 CMD 启动虚拟WIFI

    1.以管理员身份运行命令提示符: 快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡: 运行命令:netsh wlan set hostednetwork mode=allow ssi ...

  4. PHP读写文件

    一:读取文件 例1: $xml = ""; //打开文件 $f = fopen('http://app.eyuebus.com/Public/apk/version.xml', ' ...

  5. C# 4.0 之线程安全集合篇

    资料:http://www.cnblogs.com/chengxiaohui/articles/5672768.html

  6. ActiveMQ支持的传输协议

    ------------------------------------------------------ ActiveMQ支持的client-broker通讯协议有:TCP.NIO.UDP.SSL ...

  7. Bash 中的 _ 是不是环境变量

    首先,我们想到的会是 export(等价于 declare -x)命令: $ export | grep 'declare -x _=' 没有找到,那么结论就是 _ 不是环境变量?当然没那么简单,否则 ...

  8. 反射的一些用法(WP8.1下)

    我初步的理解:反射就是动态调用(dll)类. 比如某个dll有一个类,通过反射就可以知道它里面属性.方法,就可以实现调用. 确实,dll可以直接引用,但是如果遇到这种情况: 添加.删除功能同属一个Dl ...

  9. block要掌握的东西

    /* block要掌握的东西 1> 如何定义block变量 int (^sumBlock)(int, int); void (^myBlock)(); 2> 如何利用block封装代码 ^ ...

  10. Go - 项目收藏

    谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects Web框架 web.go.beego Go项目 httpmq:A ...