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. Bubble Cup 8 finals A. Fibonotci (575A)

    题意: 定义类循环序列为 长度无限,且除了有限个元素外,均满足s[i] ≡ s[i mod N] (i≥N). 现在有数列F,定义为 F[i] = s[i-2]*F[i-1] + s[i-1]*F[i ...

  2. runtime-对成员变量操作应用之归档和返归档

    为了实现归档和返归档,我们要让被归档对象的类接受NSCoding协议并且实现协议里的两个方法 - (void)encodeWithCoder:(NSCoder *)aCoder; - (nullabl ...

  3. ASP.MVC 基于AuthorizeAttribute权限设计案例

    ASP.MVC上实现权限控制的方法很多,比如使用AuthorizeAttribute这个特性 1.创建自定义特性用于权限验证 public class AuthorizeDiy : Authorize ...

  4. IIS7错误“Web服务器被配置为不列出此目录的内容”的解决办法

    *打开 Internet 信息服务(IIS)管理器 - 目录浏览 选择启用即可.

  5. 最长回文子串(Longest Palindromic Substring)

    这算是一道经典的题目了,最长回文子串问题是在一个字符串中求得满足回文子串条件的最长的那一个.常见的解题方法有三种: (1)暴力枚举法,以每个元素为中心同时向左和向右出发,复杂度O(n^2): (2)动 ...

  6. Qt 5.0+ 中 connect 新语法与重载函数不兼容问题的解决方法,以及个人看法

    Qt 5.0+ 版本提供了 connect 的新语法,相比之前的语法新语法可以提供编译期检查,使用也更方便.可是使用过程中发现一个小问题——当某个 signal 和成员函数是重载关系的时候,qmake ...

  7. jpeg huffman coding table

    亮度DC系数的取值范围及序号:                                                               序号(size) 取值范围 0 0  1 - ...

  8. Django模型的Field Types总结

    转:http://blog.csdn.net/devil_2009/article/details/41735611 Field Types 常用参数: null 如果设置为 True , Djang ...

  9. mybatis问题is not known to the MapperRegistry

    is not known to the MapperRegistry mapper.xml里面对应的dao应该是interface而非class

  10. ROW_NUMBER()与PARTITION BY 实例

    环境:SQL Server 2008 R2 数据表结构 SELECT A.* FROM [tbiz_AssScoreWeidu] A SELECT A.* ,ROW_NUMBER() OVER ( P ...