首先,添加引用: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. BZOJ 2179: FFT快速傅立叶

    2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2923  Solved: 1498[Submit][Status][Di ...

  2. 为自己的爬虫更换代理和HTML头部

    import requestsimport reimport randomimport time class download(): def __init__(self): self.iplist = ...

  3. <<< java环境搭建

    先百度搜索"jdk下载"            安装完成之后,到系统环境变量设置(电脑右键,属性,高级系统设置) 然后点击下面path系统变量,把C:\Program Files ...

  4. JS-抽奖系统-实现原理

    有本事中奖的,过来找我换红包!!哈哈!! <meta charset="UTF-8"> <title>抽奖系统</title> <styl ...

  5. C#之数组篇

    大杂烩 一.数组初始化 1.一维数组 String[] str = new String[3] { "1","2","3"};        ...

  6. entity1

  7. C语言基础(6)-char类型

    1. char常量.变量 使用单引号‘’引起来的就是char的常量 ‘a’是一个char类型的常量 “a”是一个字符串类型的常量 1是一个int型的常量 ‘1’是一个char型的常量 char a; ...

  8. [NHibernate]事务

    目录 写在前面 文档与系列文章 事务 增删改查 总结 写在前面 上篇文章介绍了nhibernate的增删改查方法及增加修改操作,这篇文章将介绍nhibernate的事务操作. SQL Server中的 ...

  9. NPM

    参考资料: 淘宝NPM

  10. Shader 学习笔记

    Shader "Custom/Diffuse Texture" { // Shader的开始,双引号内饰该Shader的名字 Properties { _MainTex (&quo ...