一、示例说明

  以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. SQL模仿Split 功能

    --方法0:动态SQL法 declare @s varchar(100),@sql varchar(1000) set @s='1,2,3,4,5,6,7,8,9,10' set @sql='sele ...

  2. MongoDB-3.2.6 副本集 和主从

    yum实例 vim /etc/yum.repos.d/mongodb-org-3.2.repo [mongodb-org-3.2] name=Mongodb baseurl=http://repo.m ...

  3. centos 安装 opencv-3.1.0

    官方安装教程 http://docs.opencv.org/3.1.0/d9/d52/tutorial_java_dev_intro.html#gsc.tab=0 注意要先安装jdk和apache a ...

  4. 随机数是骗人的,.Net、Java、C为我作证(转)

    几乎所有编程语言中都提供了"生成一个随机数"的方法,也就是调用这个方法会生成一个数,我们事先也不知道它生成什么数.比如在.Net中编写下面的代码: Random rand = ne ...

  5. 让javascript显原型!

    相信以下的javascript让你读起来痛苦不已,告诉你一下简单的办法,就可以让它显出原型!将第一个单词,即eval换成document.write,然后再运行一下,它立即就原形毕露了! eval(f ...

  6. SSH整合(Struts2+hibernate+spring)

    1.创建表 create table t_user( id int primary key auto_increment, username varchar(50), password varchar ...

  7. angular前端开发环境

    1.代码编辑工具 webstorm 2.断点调试工具 chrome插件Batarang 3.版本管理工具 git(仅仅是命令行工具) git小乌龟--tortoisegit(图形化工具) 首先在git ...

  8. Java-马士兵动态代理模式

    Java-马士兵动态代理模式 模拟jdk的动态代理的实现原理, 这些东西没有必要写出来,写项目的时候一般用不上,主要是为了面试和理解原理: java动态代理有什么作用 作用非常大,在很多底层框架中都会 ...

  9. MVC+knocKout.js 实现下拉框级联

    数据库:部门表和员工表 在控制器里面的操作: public ActionResult Index3() { ViewBag.departments = new SelectList(getDepart ...

  10. 2.4.1 用NPOI操作EXCEL--画线(转)

    之所有说NPOI强大,是因为常用的Excel操作她都可以通过编程的方式完成.这节开始,我们开始学习NPOI的画图功能.先从最简单的开始,画一条直线:对应的代码为: HSSFSheet sheet1 = ...