一、示例说明

  以gridControl1和gridControl2为例,从gridControl1拖拽行到gridControl2中去。

二、属性设置

gridControl2.AllowDrop = true;
            gridControl1.AllowDrop = true;

三、事件代码:分别为GridControl和gridview添加下列事件

#region Grid拖拽操作

        GridHitInfo GriddownHitInfo = null;

        #region 拖出
private void gridView1_MouseDown(object sender, MouseEventArgs e)
{
GridView view = sender as GridView;
GriddownHitInfo = null;
GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y)); if (Control.ModifierKeys != Keys.None) return;
if (e.Button == MouseButtons.Left && hitInfo.RowHandle >= )
{
GriddownHitInfo = hitInfo;
}
} private void gridView1_MouseMove(object sender, MouseEventArgs e)
{
GridView view = sender as GridView;
if (e.Button == MouseButtons.Left && GriddownHitInfo != null)
{
Size dragSize = SystemInformation.DragSize;
Rectangle dragRect = new Rectangle(new Point(GriddownHitInfo.HitPoint.X - dragSize.Width / ,
GriddownHitInfo.HitPoint.Y - dragSize.Height / ), dragSize); if (!dragRect.Contains(new Point(e.X, e.Y)))
{
DataRow row = view.GetDataRow(GriddownHitInfo.RowHandle);
if (row != null)
{
view.GridControl.DoDragDrop(row, DragDropEffects.Move);
GriddownHitInfo = null;
DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
}
}
}
}
#endregion #region 拖入
private void gridControl2_DragOver(object sender, DragEventArgs e)
{ if (e.Data.GetDataPresent(typeof(DataRow)))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
} private void gridControl2_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
} private void gridControl2_DragDrop(object sender, DragEventArgs e)
{
try
{
DataRow dr = e.Data.GetData(typeof(DataRow)) as DataRow;
if (dr != null)
{
FillTreeData(sender, dr);
}
}
catch (Exception ex)
{
MessageBox.Show("系统提示", ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} void FillTreeData(object sender, DataRow dr)
{
this.gridView2.AddNewRow();
gridView2.SetFocusedRowCellValue("id", Guid.NewGuid().ToString());
gridView2.SetFocusedRowCellValue("name", dr["name"].ToString());
gridView2.SetFocusedRowCellValue("code", dr["code"].ToString());
}
#endregion #endregion

四、多行拖拽

1、属性

gridControl2.AllowDrop = true;
            gridControl1.AllowDrop = true;

设置gridview可以多行选择:  gridView1.OptionsSelection.MultiSelect = true;

2、事件代码 :所有的DataRow 变为 List<DataRow>

        #region Grid拖拽操作

        GridHitInfo GriddownHitInfo = null;
#region 拖入
private void gridControl2_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(List<DataRow>)))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
} private void gridControl2_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move; } private void gridControl2_DragDrop(object sender, DragEventArgs e)
{
try
{
List<DataRow> drs = e.Data.GetData(typeof(List<DataRow>)) as List<DataRow>;
if (drs != null)
{
FillTreeData(sender, drs);
}
}
catch (Exception ex)
{
MessageBox.Show("系统提示", ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} void FillTreeData(object sender, List<DataRow> drs)
{
foreach (DataRow dr in drs)
{
this.gridView2.AddNewRow();
gridView2.SetFocusedRowCellValue("id", Guid.NewGuid().ToString());
gridView2.SetFocusedRowCellValue("name", dr["name"].ToString());
gridView2.SetFocusedRowCellValue("code", dr["code"].ToString());
}
}
#endregion #region 拖出
private void gridView1_MouseDown(object sender, MouseEventArgs e)
{
GridView view = sender as GridView;
GriddownHitInfo = null;
GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y)); if (Control.ModifierKeys != Keys.None) return;
if (e.Button == MouseButtons.Left && hitInfo.RowHandle >= )
{
GriddownHitInfo = hitInfo;
}
} private void gridView1_MouseMove(object sender, MouseEventArgs e)
{
GridView view = sender as GridView;
if (e.Button == MouseButtons.Left && GriddownHitInfo != null)
{
Size dragSize = SystemInformation.DragSize;
Rectangle dragRect = new Rectangle(new Point(GriddownHitInfo.HitPoint.X - dragSize.Width / ,
GriddownHitInfo.HitPoint.Y - dragSize.Height / ), dragSize); if (!dragRect.Contains(new Point(e.X, e.Y)))
{
int[] rowint = view.GetSelectedRows();
List<DataRow> row = new List<DataRow>();
foreach (int i in rowint)
{
row.Add(view.GetDataRow(i));
}
if (row != null && row.Count > )
{
view.GridControl.DoDragDrop(row, DragDropEffects.Move);
GriddownHitInfo = null;
DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
}
}
}
}
#endregion
#endregion

dev GridControl实现拖拽的更多相关文章

  1. Dev GridView行拖拽

    http://blog.csdn.net/keyrainie/article/details/8513802 http://www.cnblogs.com/qq4004229/archive/2012 ...

  2. DevExpress的GridControl拖拽DraopDown后计算HitInfo的RowHandle错误

    最近在使用GridControl的拖拽功能时候遇到了一个问题:当GridControl触发DropDrop事件时,计算对应的RowHandle错误.当把鼠标拖拽到GridView一个单元格的靠上面的部 ...

  3. dev TreeList拖拽

    一.说明 使用dev控件,TreeList1向TreeList2拖拽 二.属性 //允许拖拽            treeList1.AllowDrop = true;            tre ...

  4. Dev Grid拖拽移动行

    效果图 源码下载 拖拽时带行截图效果实现代码 /// <summary> /// 拖拽帮助类 /// </summary> public static class DragHe ...

  5. dev gridview 单元格值拖拽替换

    public class GridViewDropCell { //dvginfo根据鼠标点击的x.y坐标获取该点的相关信息 private GridHitInfo downHitInfo; priv ...

  6. dev gridview拖拽数据移动

    设置属性gridView1.OptionsSelection.EnableAppearanceFocusedCell = false; //确保选定行的背景色一样. private BindingLi ...

  7. Html5+NodeJS——拖拽多个文件上传到服务器

    实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用 ...

  8. React Editor 应用编辑器(1) - 拖拽功能剖析

    这是可视化编辑器 Gaea-Editor 的第一篇连载分析文章,希望我能在有限的篇幅讲清楚制作这个网页编辑器的动机,以及可能带来的美好使用前景(画大饼).它会具有如下几个特征: 运行在网页 文档流布局 ...

  9. 【百度地图API】如何制作可拖拽的沿道路测距

    原文:[百度地图API]如何制作可拖拽的沿道路测距 摘要: 地图测距,大家都会,不就map.getDistance麼.可是,这只能测任意两点的直线距离,用途不够实际啊.比如,我想测试北京天安门到北京后 ...

随机推荐

  1. 项目:学生查看自己的作业情况和分数(php)

    <?php include '../includes/db.ini.php'; try { $sql='SELECT work_id,title,work_text,score_value FR ...

  2. ionic 踩过的坑

    内联模板 : script可能你没有注意过,HTML中常用的script标签在AngularJS中被重新定义了: 除了原来的脚本声明功能之外,如果script元素的type属性 定义为text/ng- ...

  3. KnockoutJS:

    一.ko对象 js对象的改变都会导致viewmodel的变化,但view不一定变化 往ko对象里面push,viewmodel的变化,引起view的变化. 往js对象里面push,model的变化引起 ...

  4. 手动编译安装LNMP

    yum -y install gcc gcc-c++ autoconf nss_ldap libjpeg libjpeg-devel libpng libpng-devel freetype free ...

  5. mmysql-最大链接数和最大并发数的区别

    关于连接数和并发数的设置(针对Innodb引擎) 对于机器本身来说,进程数是说机器正在运行的进程数量,调出任务管理器就可以看到.连接数是指进程接收和发送数据的连接ip的数量.并发数是指进程同时发送数据 ...

  6. WINDOWS SERVER 2008 RD服务器搭建

    RD服务器详细名称为:RemoteDesktop Server 远程桌面服务器.但微软觉得这名字很怪诞,所以中文名用:终端服务器来代替这个叫法:TerminalServiceServer 在介绍搭建之 ...

  7. 编译安装php5.5和php-fpm

    1.下载指定源码包 2../configure --prefix=/usr/local/php53 --enable-fpm --enable-debug --with-gd --with-jpeg- ...

  8. 掌握Thinkphp3.2.0----模版基础

    我们将要学习一下 ThinkPHP 模版,ThinkPHP 内置了一个基于 XML 的性能卓越的模版引擎 ThinkTemplate,使用了动态编译和缓存技术,支持自定义标签库, 其实我还体会不到其中 ...

  9. Symbols

    https://hacks.mozilla.org/2015/06/es6-in-depth-symbols/ <script> function w(wcon) { console.lo ...

  10. linux下安装svn server

    1. yum install subversion 2. mkdir -p /home/svn/svnfile 3. svnadmin create /home/svn/svnfile 4. 进入co ...