一、示例说明

  以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. 重置dns

    flusdns

  2. C# 依赖注入

      http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html 这篇文章真的非常非常好···绝对值得收藏学习.     目录 目录 1 ...

  3. 配置webdriver环境

    安装环境pip install selenium,提示 Could not find a version that satisfies the requirement selenium (from v ...

  4. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  5. 【javaweb学习】解析XML

    XML解析方式有两种 dom:Document Object Model文档对象模型,是w3c组织推荐的解析方式 sax:Simple Api XML不是官方标准,但它是XML社区实际上的标准,几乎所 ...

  6. [skill][gdb] gdb 多线程调试

    中文快速入门: http://coolshell.cn/articles/3643.html (关于多线程的部署说的并不太对) 进阶: 多进程相关概念: inferiors 是什么? http://m ...

  7. ZTE交换路由设备配置的备份与恢复

    一.TFTP服务器搭建 使用用户计算机搭建TFTP服务器,交换路由设备作为TFTP客户端. 运行TFTPServer.exe,该程序所在的目录为TFTP的根目录. 请保证您的TFTP可以Ping通所要 ...

  8. chrome 'adobe flash player 已过期'解决方法

    http://labs.adobe.com/downloads/flashplayer.html下载 WindowsDownload Flash Player for Opera and Chromi ...

  9. css 文字溢出隐藏 带省略号

    .demo{ width:100px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } 注意宽度要设置

  10. 使用PowerShell解三道测试开发笔试题

    在网上看到了三道测试开发的笔试题,答案是用Python解的.这段时间正好在学PowerShell,练习一下:) 1. 验证邮箱格式 2. 获取URL的后缀名 3. 获取前一天时间或前一秒 我的解法是: ...