首先,添加引用: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. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  2. WebService学习总结(四)——调用第三方提供的webService服务

    http://www.cnblogs.com/xdp-gacl/p/4260627.html 互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他 ...

  3. xpth 字符串截取

    <xsl:value-of select="substring(//div[@class='infos'],1,27)"/>

  4. Google Map API V3开发(3)

    Google Map API V3开发(1) Google Map API V3开发(2) Google Map API V3开发(3) Google Map API V3开发(4) Google M ...

  5. Python学习笔记——集合类型

    集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...

  6. Solr学习总结(七)Solr搜索引擎的整体架构

    经过前面一段时间的努力,终于把我所知道的关于solr 的内容都总结完了.前面讲到了solr 的安装配置,web管理后台的使用,solr 的查询参数和查询语法,还说到了solr的客户端 solrnet  ...

  7. JavaScript从父页面获取子页面的值(子页面又如何访问父页面)

    之前还真没做过类似的东西,,top页面获取子页面的document.. 在百度搜了下即找到这个东东,还好,能用. 主要就是使用 contentWindow方法,获取子页面的所有document,再做处 ...

  8. [译]Android调整图像大小的一些方法

    翻译自 某大神在Stack Overflow里的自问自答 (一般我们将Bitmap翻译为位图,但为了更好理解,在本文中我将它翻译成图像): 我们在开发的时候,经常需要从服务器中加载图像到客户端中,但有 ...

  9. 坑爹的私有API

    iOS私有API扫描工作总结 背景 苹果提供的iOS开发框架分PrivateFramework和Framework,PrivateFramework下的库是绝对不允许在提交的iOS应用中使用的,只允许 ...

  10. (备忘)Rect和RectF的区别

    1.Rect的变量使用int类型,而RectF使用float类型. 2.一些方法区别 <1>.Rect类 equals(Object obj) (for some reason it as ...