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麼.可是,这只能测任意两点的直线距离,用途不够实际啊.比如,我想测试北京天安门到北京后 ...
随机推荐
- sqlserver 性能优化常用方法
查看被锁表: select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys. ...
- php变量和数组大小限制
前言:shopnc在默认拼接sql的时候会带上limit 1000 那么问题就来了,如果在使用系统的封装的方法,但是如果你没有带上->limit(false)就完蛋了 那么问题来了,在判断时候, ...
- C++强制类型转换
C语言强制类型转换过于粗暴,任意类型之间都可以进行转换,编译很难判断其正确性; 难于定位,在源码中无法快速定位所有使用强制类型转换的语句. C++将强制类型转换分为4种不同的类型:static_cas ...
- ajax的使用:(ajaxReturn[ajax的返回方法]),(eval返回字符串);分页;第三方类(page.class.php)如何载入;自动加载函数库(functions);session如何防止跳过登录访问(构造函数说明)
一.ajax例子:ajaxReturn("ok","eval")->thinkphp中ajax的返回值的方法,返回参数为ok,返回类型为eval(字符串) ...
- ThinPHP基础
注:约定([书写]规则)胜于配置 *测试连接是否成功:localhost/tp/index.php1.localhost/tp/index.php(入口文件)/Home(模块名)/Index(控制器名 ...
- vsftp 搭建及虚拟账号配置
安装vsftpd yum -y install vsftpd chkconfig vsftpd on 修改主配置文件 vi /etc/vsftpd/vsftpd.conf # 允许匿名用户登陆,登陆时 ...
- jQuery jQuery对象与dom对象的转换
jQuery对象本质上是一个构造函数,主要作用是返回jQuery对象的实例. jQuery选择器返回的是一个类似数组的对象,用下标运算取出的对象如$('body')[0],是dom对象,对此jquer ...
- Python学习笔记 for windows 三
多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能. 哺乳类:能跑的哺乳类,能飞的哺乳类: 鸟类:能跑的鸟类,能飞的鸟类. class Animal(object): ...
- 在java中获取attr的值
首先说如何获取已经在style里面定义好的attr的值,以colorPrimary为例: TypedValue value = new TypedValue(); mContext.getTheme( ...
- Python学习【第十篇】基础之杂货铺
字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 百分号方式: ...