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. 轮播插件unsilder 源码解析(一)---源码解析

    jq扩展内容 $.fn.unslider = function(opts) { return this.each(function(index,elem) { var $this = $(elem); ...

  2. mac机快捷键操作

    1. 屏幕最大和缩小:command+ctrl +f 2.切换应用:comand+tab, 3.大小写转换:comand + 空格 4.切换到下/上一个标签页:同时按 ⌘-Option 和向右/左箭头 ...

  3. SFDC中的DEBUG

    SFDC的顾问初期,基本都是做一些配置的工作,权限,字段,工作流和审批流之类.那么在这些工作流或者审批流没有按照你预想的来运行而且你检查了多遍后没有找到问题所在的时候.你就需要DEBUG了. 做过开发 ...

  4. C#通过WebClient/HttpWebRequest实现http的post/get方法

    C#通过WebClient/HttpWebRequest实现http的post/get方法 http://www.cnblogs.com/shadowtale/p/3372735.html

  5. centos 7.0 编译安装php 7.0.3

    php下载页面 http://cn2.php.net/downloads.php 7.0.3多地区下载页面 http://cn2.php.net/get/php-7.0.3.tar.gz/from/a ...

  6. 脚本工具(获取某个文件夹下的所有图片属性批量生成css样式)

    问题描述: 由于有一次工作原因,就是将某个文件夹下的所有图片,通过CSS描述他们的属性,用的时候就可以直接引用.但是我觉得那个文件夹下的图片太多,而且CSS文件的格式又有一定的规律,所有想通过脚本来生 ...

  7. 【IOS】模仿windowsphone列表索引控件YFMetroListBox

    有没有觉得UITableView自带的右侧索引很难用,我一直觉得WindowsPhone中的列表索引非常好用. 所以呢,我们来实现类似Windows Phone中的列表索引(这就是信仰). 最终实现效 ...

  8. nginx使用ngx_lua访问后端Thrift-Server实现和介绍

    背景 随着openresty的出现,让nginx使用lua解决一些业务的能力大幅度提高,ngx_lua可以使用nginx自生的基于事件驱动的IO模型,和后端的存储,业务等系统实现非阻塞的连接交互. 如 ...

  9. maven+ssm+cxf3配置例子

    以下只是简单记录 ssm结合cxf3的配置 提供方配置::: pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0&quo ...

  10. js基础总结

    DOM 节点 document节点  nodeType:9 文本节点  nodeType:3 元素节点  nodeType:1 注释节点  nodeType:8 属性节点  nodeType:2 at ...