dev GridControl实现拖拽
一、示例说明
以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实现拖拽的更多相关文章
- Dev GridView行拖拽
http://blog.csdn.net/keyrainie/article/details/8513802 http://www.cnblogs.com/qq4004229/archive/2012 ...
- DevExpress的GridControl拖拽DraopDown后计算HitInfo的RowHandle错误
最近在使用GridControl的拖拽功能时候遇到了一个问题:当GridControl触发DropDrop事件时,计算对应的RowHandle错误.当把鼠标拖拽到GridView一个单元格的靠上面的部 ...
- dev TreeList拖拽
一.说明 使用dev控件,TreeList1向TreeList2拖拽 二.属性 //允许拖拽 treeList1.AllowDrop = true; tre ...
- Dev Grid拖拽移动行
效果图 源码下载 拖拽时带行截图效果实现代码 /// <summary> /// 拖拽帮助类 /// </summary> public static class DragHe ...
- dev gridview 单元格值拖拽替换
public class GridViewDropCell { //dvginfo根据鼠标点击的x.y坐标获取该点的相关信息 private GridHitInfo downHitInfo; priv ...
- dev gridview拖拽数据移动
设置属性gridView1.OptionsSelection.EnableAppearanceFocusedCell = false; //确保选定行的背景色一样. private BindingLi ...
- Html5+NodeJS——拖拽多个文件上传到服务器
实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用 ...
- React Editor 应用编辑器(1) - 拖拽功能剖析
这是可视化编辑器 Gaea-Editor 的第一篇连载分析文章,希望我能在有限的篇幅讲清楚制作这个网页编辑器的动机,以及可能带来的美好使用前景(画大饼).它会具有如下几个特征: 运行在网页 文档流布局 ...
- 【百度地图API】如何制作可拖拽的沿道路测距
原文:[百度地图API]如何制作可拖拽的沿道路测距 摘要: 地图测距,大家都会,不就map.getDistance麼.可是,这只能测任意两点的直线距离,用途不够实际啊.比如,我想测试北京天安门到北京后 ...
随机推荐
- Visual Studio命令行工具
devenv.exe Visual Studio IDE 主程序,位于VS_INSTALL_DIR/Common7/IDE. 本节内容来源:vs2010环境执行devenv /? 启动VS deven ...
- [转载] Ubuntu 16.04 LTS 一键安装VNC
安装 X11VNC: sudo apt install x11vnc -y 配置访问密码: sudo x11vnc -storepasswd /etc/x11vnc.pass 创建服务: vi /li ...
- MySQL(无GUI) Windows安装和启动
1.在官网http://dev.mysql.com/downloads/下载 MySQL Community Server 2.解压后是这个样子: 3.找到cmd,并且用管理员权限启动,必须!不然那没 ...
- Linq分组
1.lin语句 int[] nums = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0, 3 }; DataTable table = new DataTable("Numb ...
- UML序列图总结(Loop、Opt、Par和Alt)
序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线 ...
- QFileSystemModel
#include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDi ...
- C++中为什么要将析构函数定义成虚函数
构造函数不可以是虚函数的,这个很显然,毕竟虚函数都对应一个虚函数表,虚函数表是存在对象内存空间的,如果构造函数是虚的,就需要一个虚函数表来调用,但是类还没实例化没有内存空间就没有虚函数表,这根本就是个 ...
- CXF Spring开发WebService,基于SOAP和REST方式 【转】
官网示例 http://cxf.apache.org/docs/writing-a-service-with-spring.html http://cxf.apache.org/docs/jax-rs ...
- Android pop3与imap方式接收邮件(javamail)
需要下载3个jar包:mail.jar/ activation.jar/ additionnal.jar 1.pop3 /** * 以pop3方式读取邮件,此方法不能读取邮件是否为已读,已 ...
- 运行maven项目