http://blog.csdn.net/keyrainie/article/details/8513802

http://www.cnblogs.com/qq4004229/archive/2012/05/28/2521611.html

http://www.cnblogs.com/zeroone/p/4176887.html

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using DevExpress.XtraGrid.Views.Grid.ViewInfo;

namespace DevGridViewDragDropTest

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

SetDtSource();

GridViewInit();

BindGrid();

}

//鼠标坐标

private GridHitInfo downHitInfo; //鼠标左键按下去时在GridView中的坐标

private GridHitInfo upHitInfo; //鼠标左键弹起来时在GridView中的坐标

private int startRow; // 拖拽的第一行

private int[] rows; //拖拽的所有行

//数据源

DataTable dtSource;

private void SetDtSource()

{

dtSource = new DataTable();

dtSource.Columns.Add("id", typeof(int));

dtSource.Columns.Add("name", typeof(string));

dtSource.Columns.Add("age", typeof(int));

dtSource.Columns.Add("add", typeof(string));

DataRow dr;

for (int i = 0; i < 20; i++)

{

dr = dtSource.NewRow();

dr["id"] = i;

if (i % 2 == 1)

{

dr["name"] = "小张" + i;

dr["age"] = 20 + i;

}

else

{

dr["name"] = "老李" + i;

dr["age"] = 10 + i;

}

dr["add"] = "陕西省西安市第" + i + "大道";

dtSource.Rows.Add(dr);

}

}

private void GridViewInit()

{

gridControl1.AllowDrop = true; // 确保能够拖拽

gridView1.OptionsSelection.MultiSelect = true; //确保能够多选

gridView1.OptionsSelection.EnableAppearanceFocusedCell = false; //确保选定行的背景色一样

gridView1.OptionsSelection.EnableAppearanceFocusedCell = false; //确保选定行的背景色一样。

gridView1.OptionsBehavior.Editable = false;

}

private void BindGrid()

{

gridControl1.DataSource = dtSource;

}

    //鼠标按下事件
private void gridView1_MouseDown(object sender, MouseEventArgs e)
{
downHitInfo = gridView1.CalcHitInfo(new Point(e.X, e.Y)); //鼠标左键按下去时在GridView中的坐标
} //鼠标移动事件
private void gridView1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left) return; //不是左键则无效
if (downHitInfo == null || downHitInfo.RowHandle < 0) return; //判断鼠标的位置是否有效 rows = gridView1.GetSelectedRows(); //获取所选行的index
startRow = rows.Length == 0 ? -1 : rows[0];
DataTable dt = dtSource.Clone(); foreach (int r in rows) // 根据所选行的index进行取值,去除所选的行数据,可能是选取的多行
{
int dataSourcerows = gridView1.GetDataSourceRowIndex(r); //获取行数据
dt.ImportRow(dtSource.Rows[dataSourcerows]); //保存所选取的行数据
}
gridControl1.DoDragDrop(dt, DragDropEffects.Move);//开始拖放操作,将拖拽的数据存储起来
} //拖拽过程事件
private void gridControl1_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
} //拖拽完成后事件
private void gridControl1_DragDrop(object sender, DragEventArgs e)
{
Point gridviewPoint = this.PointToScreen(this.gridControl1.Location); //获取鼠标在屏幕上的位置。
upHitInfo = gridView1.CalcHitInfo(new Point(e.X - gridviewPoint.X, e.Y - gridviewPoint.Y)); //鼠标左键弹起来时在GridView中的坐标(屏幕位置减去 gridView 开始位置)
if (upHitInfo == null || upHitInfo.RowHandle < 0) return; int endRow = gridView1.GetDataSourceRowIndex(gridView1.GetDataSourceRowIndex(upHitInfo.RowHandle)); //获取拖拽的目标行index DataTable dt = e.Data.GetData(typeof(DataTable)) as DataTable; //获取要移动的数据,从拖拽保存的地方:(gridControl1.DoDragDrop(dt, DragDropEffects.Move); ) if (dt != null && dt.Rows.Count > 0) //拖拽的数据为空
{
int a;
DataRow xs = dtSource.Rows[endRow]; //获取拖拽的目标行,准备进行移植
if (!rows.Contains(endRow)) //如果多选的话,确保不能拖拽到这几个里
{
gridView1.ClearSelection(); //从GirdView中删除所拖拽的数据
int moveValue = 0;
foreach (int i in rows)
{
dtSource.Rows.Remove(dtSource.Rows[i - moveValue]); //从GirdView的数据源中删除所拖拽的数据
moveValue++;
} if (startRow > endRow)
a = dtSource.Rows.IndexOf(xs); //若果往上托,则加在鼠标到达行的上面
else
a = dtSource.Rows.IndexOf(xs) + 1; //如果往下拖,则加在鼠标到达行的下面
int j = 0;
DataRow drTemp;
foreach (DataRow dr in dt.Rows)
{
drTemp = dtSource.NewRow();
foreach (DataColumn dc in dr.Table.Columns)
{
drTemp[dc.ColumnName] = dr[dc.ColumnName];
}
dtSource.Rows.InsertAt(drTemp, a + j); //将拖拽的数据再次添加进来
gridView1.SelectRow(a + j);
j++;
}
gridView1.FocusedRowHandle = a;
}
gridControl1.DataSource = dtSource; //重新绑定
gridView1.RefreshData();
}
}
}

}

Dev GridView行拖拽的更多相关文章

  1. dev GridControl实现拖拽

    一.示例说明 以gridControl1和gridControl2为例,从gridControl1拖拽行到gridControl2中去. 二.属性设置 gridControl2.AllowDrop = ...

  2. GridView实现拖拽排序以及数据交互

    在研究项目中的一个效果的时候,查找资料过程中发现有人有这么一种需求,就是GridView在实现拖拽排序的基础上,如果是两个GridView之间实现拖拽效果,并要实现数据交互. 一.效果图: 实现这个效 ...

  3. JS组件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)

    前言:前天刚写了篇JS组件系列——Bootstrap Table 表格行拖拽,今天接到新的需要,需要在之前表格行拖拽的基础上能够同时拖拽选中的多行.博主用了半天时间研究了下,效果是出来了,但是感觉不尽 ...

  4. Jquery easyui treegrid实现树形表格的行拖拽

    前几天修改了系统的一个功能——实现树形列列表的行拖拽,以达到排序的目的.现在基本上功能实现,现做一个简单的总结. 1.拿到这个直接网上搜,有好多,但是看了后都觉得不是太复杂就是些不是特别想看的例子,自 ...

  5. jqGrid之treeGrid及行拖拽

    单纯的做个小记录 今天做功能用到了jqGrid里面的treeGrid,遇到几个问题,这里做下记录 treeGrid 树表格的应用在官网给出了很直白的例子: 1.http://blog.mn886.ne ...

  6. devpress 的gridview 控件的行拖拽 z

    首先,添加引用:using DevExpress.XtraGrid.Views.Grid.ViewInfo;               gridControl1.AllowDrop = true; ...

  7. JS组件系列——Bootstrap Table 表格行拖拽

    前言:之前一直在研究DDD相关知识,好久没更新JS系列文章了.这两天做了一个简单的业务需求,觉得效果还可以,今天在这里分享给大家,欢迎拍砖~~ 一.业务需求及实现效果 项目涉及到订单模块,那天突然接到 ...

  8. ListView 多行拖拽排序

    核心代码:修改ListView的属性,及绑定事件 // 初始化listView1. private void InitializeListView() { listView1.AllowDrop = ...

  9. table行拖拽

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. [Android]学习笔记之布局

    5大布局,其中前3个是常用的,第四个绝对布局已经提示deprecated ![](http://images2015.cnblogs.com/blog/194303/201611/194303-201 ...

  2. ORA-00600: 内部错误代码

    运行时报ORA-00600: 内部错误代码, 参数:[qcsgpvc3],[],[],[],[],[],[],[],[],[],[],[]    ,上网搜了但大多数都不行.无心插柳柳成荫,就在无奈想要 ...

  3. .gitignore过滤个人配置

    git还是一个很好使用的版本工具.所以用eclipse做自己的小玩意儿,在多台电脑之间同步的时候我经常会使用它.. 但是有个问题..不同电脑的eclipse的个人配置稍微有那么一点点的不同..比如有几 ...

  4. SQL创建流水号

    创建流水号表 CREATE TABLE SystemSerialNo ( SerialNoId INT PRIMARY KEY IDENTITY, TableName VARCHAR(60), Pre ...

  5. js像素运算问题

    通过DOM获取的某一距离属性(比如left)是带px单位的,直接对其算术运算不起效,要先把获取到的值处理一下去掉px单位. 方法一(用处理字符串的方式去除px): var x=document.get ...

  6. redis 间断性耗时长问题解决

    我发现开发项目用的redis 隔一两分钟就出现 耗时问题,长达五秒.一开始以为是 redis 服务器不稳定,但运维测试发现redis稳定的,在高并发下最大耗时也就只有100毫秒左右,怎么也不可能达到5 ...

  7. js的DOM的方法和属性总结

    1.DOM的获取元素document.getElementById()context.getElementsByTagName(tag) (可以获取相应上下文环境所有的tag标签)context.ge ...

  8. 创伤后应激障碍(PTSD)

    创伤后应激障碍(Post Traumatic Stress Disorder,PTSD)又称延迟性心因性反应(Delayed Psychogenic Reaction),是由应激性事件或处境而引起的延 ...

  9. CI模板加载css和js

    1.需求 ci无法加载css和js文件. 2.解决 删除..htaccess文件. 在config目录下配置base_url,并传给页面 $base_url = $this->config-&g ...

  10. 创建dll教程

    先看我的总结: 总结: 1.头文件中如果想以C形式提供,要判断,如果定义了 _cplusplus, extern "c"{  这里写接口声明 } 2.接口声明中,要表明接口接入点的 ...