devpress 的gridview 控件的行拖拽 z

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

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

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

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

gridView1.OptionsBehavior.Editable = false;

gridView1.OptionsBehavior.ReadOnly = true;

上述初始化最好放在赋数据源之前。否则数据一开始显示的时候没有选中行。

//GridHitInfo根据鼠标点击的x、y坐标获取该点的相关信息

private GridHitInfo downHitInfo;

private GridHitInfo upHitInfo;

触发事件:

//鼠标按下事件

private void gridView1_MouseDown(object sender, MouseEventArgs e)
        {
            downHitInfo = gridView1.CalcHitInfo(new Point(e.X,e.Y));
        }

//鼠标移动事件

private void gridView1_MouseMove(object sender, MouseEventArgs e)        {
            if (e.Button != MouseButtons.Left) return;        //判断是否是左键
            if (downHitInfo == null||downHitInfo.RowHandle <0) return;   //判断按下的位置是否有值,是否是gridview 的Items.

int[] rows =gridView1.GetSelectedRows();

List<XESHI > row = new List<XESHI >();

foreach (int r in rows)   // 获取gridview 数据源中对应的信息。
             {

//根据 gridview 中的行索引获取数据源中对应的是行索引
                 int dataSourcerows = gridView1.GetDataSourceRowIndex(r);

row.Add(asd[dataSourcerows]);
             }
             gridControl1.DoDragDrop(row, DragDropEffects.Move);//开始拖放操作。
        }

private void gridControl1_DragDrop(object sender, DragEventArgs e)

{

//获取鼠标在屏幕上的位置。
            Point gridviewPoint = this.PointToScreen (this.gridControl1.Location  );  
            //获取 gridview 中对应的的位置(屏幕位置减去 gridView 开始位置)

upHitInfo = gridView1.CalcHitInfo(new Point(e.X - gridviewPoint.X, e.Y - gridviewPoint.Y));

if (upHitInfo == null ||
upHitInfo.RowHandle < 0) return;

//获取释放的位置列索引
            int endRow =gridView1.GetDataSourceRowIndex ( gridView1.GetDataSourceRowIndex(upHitInfo.RowHandle));

List<XESHI> row = e.Data.GetData(typeof(List<XESHI>)) as List<XESHI>;  //获取要移动的数据

if (row != null && row.Count > 0) //没有移动的数据跳过
            {

int a;

//获取移动列集合的第一列在数据源的索引

int startRow = asd.IndexOf(row[0]);

XESHI xs = asd[endRow];

if (!row.Contains(xs))  //如果多选的话,确保不能拖拽到这几个里
                {
                    gridView1.ClearSelection();
                    //排序,先删除后后添加,
                    for (int i = 0; i < row.Count; i++)
                        asd.Remove(row[i]);
                    //若果往上托,则加在鼠标到达行的上面

//如果往下拖,则加在鼠标到达行的下面
                    if (startRow > endRow)
                        a = asd.IndexOf(xs);
                    else
                        a = asd.IndexOf(xs) + 1;

for (int i = 0; i < row.Count; i++)
                    {
                        asd.Insert(a + i, row[i]);
                        gridView1.SelectRow(a + i);
                    }
                    gridView1.FocusedRowHandle = a;
                }

}
            gridControl1.DataSource = asd;
            gridView1.RefreshData();
        }

private void gridControl1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

程序中用到的一些类:

public class XESHI

{

public string Name
{ get; set;
}

public string Xinshui
{ get; set;
}

}

List<XESHI> asd = new List<XESHI>();

时间: 2024-12-20 08:03:45

devpress 的gridview 控件的行拖拽 z的相关文章

win32 sdk树形控件的项拖拽实现

本课中,我们将学习如何使用树型视图控件.另外还要学习如何在树型视图中完成拖-拉动作,以及如何使用图象列表. 理论: 树型视图是一种特别的窗口,我们可以使用它一目了然地表示某种层次关系.譬如象在资源管理器中左边窗口中的就是树型视图.您可以调用CreateWindowEx来创建树型视图,传递一个类名""SysTreeView32"",或者您也可以把它放到一个对话框中去.不要忘了在您的代码中加入InitCommonControls函数. 树型视图有几种特有的风格.下面是几

Android基础控件——RecyclerView实现拖拽排序侧滑删除效果

RecyclerView实现拖拽排序侧滑删除效果 事先说明: RecyclerView是ListView的升级版,使用起来比ListView更规范,而且功能和动画可以自己添加,极容易扩展,同样也继承了ListView复用convertView和ViewHolder的优点.   思路分析: 1.导包.在布局中使用RecyclerView 2.需要一个JavaBean用来存储展示信息 3.需要一个填充RecyclerView的布局文件 4.在代码中找到RecyclerView,并为其绑定Adapte

最近写的一个控件——Well Swipe 拖拽排序实现

如图: >删除过渡动画 >拖拽排序

Repeater, DataList, 和GridView控件的区别

http://blog.sina.com.cn/s/blog_646dc75c0100h5p6.html http://www.cnblogs.com/phone/archive/2010/09/15/1826891.html 1. GridView 控件 GridView 控件用于显示表中的数据.通过使用 GridView 控件,您可以显示.编辑.删除.排序和翻阅多种不同的数据源(包括数据库.XML 文件和公开数据的业务对象)中的表格数据. 显示表格数据是软件开发中的一个周期性任务.ASP.N

GridView控件显示有外键实体

1).先拖入GridView控件,再拖入数据源控件 ObjectDataSource ,配置数据源控件: 1.配置SELECET得到所有数据时,得先修改自动生成代码 DAL.Room 的一个方法: if (strWhere != null && strWhere.Trim() != "") 1 /// <summary> 2 /// 获得数据列表 3 /// </summary> 4 public DataSet GetList(string s

GridView控件相关

---恢复内容开始--- GridView控件的[AutoGenerateColumns]属性(bool类型)的意思是----运行时是否基于关联的数据源自动生成列. 这样造成的影响是列的标题自动生成无法进行修改. 想手工的控制列名,则需把这个属性设为False.然后再控件的右上角点击,出现[编辑列],或者在属性页面设置[Columns]属性,都会弹出编辑列的界面: (1).[BoundField]----绑定以文本形式显示一个字段.它的属性: HeaderText----就是显示的列名, Dat

GridView控件通过bit值显示复选框状态

前几天用VS2013做了一个Asp.net下用GridView控件显示数据选中状态的小例子,引发了关于bit的一些新认识. 先简单说说我这个例子吧. 在VS里新建一个web窗体,然后拖入一个GridView控件,绑定Sql Server数据库里的数据源,再通过设置模板添加一个新列.在这个列中加入一个CheckBox控件,然后绑定到数据库里的字段. 开始我设置这个字段的类型为varchar,字段的值为True.False等.绑定后却无法达到想要的效果,即F5后网页内数据库isText字段值为Tru

C#操作GridView控件

GridView控件是一个visualStudio自带的数据控件,它可以非常快速的将数据以表格方式显示在web页面上.下面就是一个利用GridView控件进行数据绑定的小例子,内容如下: 数据来源自一个XML文件,至于如何操作XML文件,这里不作详细描述,具体可以参考http://www.cnblogs.com/programsky/p/3816073.html 1.XML内容如下: <?xml version="1.0" encoding="utf-8"?&

ASP.NET——GridView控件绑定数据

        ASP.NET提供了许多种数据服务器控件,用于在Web页面中显示数据库中的表数据,GridView控件就是其中之一.这个控件和我们以前学过的DataGridView控件几乎是一样的,所以对GridView控件我们也并不陌生,下面简单介绍一下它的使用.         前台: 在工具箱中找到GridView控件,并把它拖拽到代码编辑区域.   第一步,进入设计界面,在GridView控件上方有一个向右的黑色小三角,单击这个按钮,选择编辑列,如图:          第二步,去掉自动