Dev GridControl控件行拖拽实现
发布日期:2021-06-28 18:27:45
浏览次数:2
分类:技术文章
本文共 4794 字,大约阅读时间需要 15 分钟。
尝试了很多方法,终于找到了GridControl中GridView表格行拖拽的方式,从这个链接()中获得的灵感,但还存在问题,
比如用gridView1.Columns[“排序列名”].SortOrder = DevExpress.Data.ColumnSortOrder.Ascending;实现的排序,
只是在界面显示上实现了排序,但绑定的数据表格行并没有变动!
所以我直接对绑定的表格操作,实现行的排序。
示例图如下(不知道怎么做动图):
实现代码如下:
const string OrderFieldName = "序号"; GridHitInfo downHitInfo = null; DataTable dt = new DataTable(); public Form1() { InitializeComponent(); } ////// 窗体加载 /// /// /// private void Form1_Load(object sender, EventArgs e) { //填充数据 dt.Columns.Add(OrderFieldName); dt.Columns.Add("列2"); dt.Columns.Add("列3"); dt.Rows.Add("1", "第一行数据", "1"); dt.Rows.Add("2", "第二行数据", "2"); dt.Rows.Add("3", "第三行数据", "3"); dt.Rows.Add("4", "第四行数据", "4"); dt.Rows.Add("5", "第五行数据", "5"); dt.Rows.Add("6", "第六行数据", "6"); gridControl1.DataSource = dt; gridView1.OptionsCustomization.AllowSort = false; gridView1.OptionsView.ShowGroupPanel = false; gridControl1.AllowDrop = true; gridView1.OptionsBehavior.Editable = false; } ////// 上移行 /// /// /// private void btn_up_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { gridControl1.Focus(); int index = gridView1.FocusedRowHandle; if (index <= 0) return; ChangeRow(index, index - 1); } ////// 下移行 /// /// /// private void btn_down_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { gridControl1.Focus(); int index = gridView1.FocusedRowHandle; if (index >= gridView1.DataRowCount - 1) return; ChangeRow(index, index + 1); } private void gridView1_MouseDown(object sender, MouseEventArgs e) { downHitInfo = null; GridHitInfo hitInfo = gridView1.CalcHitInfo(new Point(e.X, e.Y)); //鼠标左键单击,在行内,且不为新行 if (e.Button == MouseButtons.Left && hitInfo.InRow && hitInfo.RowHandle != GridControl.NewItemRowHandle) downHitInfo = hitInfo; } private void gridView1_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left && downHitInfo != null) { Size dragSize = SystemInformation.DragSize; Rectangle dragRect = new Rectangle(new Point(downHitInfo.HitPoint.X - dragSize.Width / 2, downHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize); if (!dragRect.Contains(new Point(e.X, e.Y))) { gridControl1.DoDragDrop(downHitInfo, DragDropEffects.Move); downHitInfo = null; } } } private void gridControl1_DragOver(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(GridHitInfo))) { GridHitInfo downHitInfo = e.Data.GetData(typeof(GridHitInfo)) as GridHitInfo; if (downHitInfo == null) return; GridHitInfo hitInfo = gridView1.CalcHitInfo(gridControl1.PointToClient(new Point(e.X, e.Y))); if (hitInfo.InRow && hitInfo.RowHandle != downHitInfo.RowHandle && hitInfo.RowHandle != GridControl.NewItemRowHandle) e.Effect = DragDropEffects.Move; else e.Effect = DragDropEffects.None; } } private void gridControl1_DragDrop(object sender, DragEventArgs e) { GridHitInfo srcHitInfo = e.Data.GetData(typeof(GridHitInfo)) as GridHitInfo; GridHitInfo hitInfo = gridView1.CalcHitInfo(gridControl1.PointToClient(new Point(e.X, e.Y))); int sourceRowIndex = srcHitInfo.RowHandle; int targetRowIndex = hitInfo.RowHandle; if (sourceRowIndex == targetRowIndex) return; ChangeRow(sourceRowIndex, targetRowIndex); } ////// 删除源行,并在目标位置插入源行 /// /// /// private void ChangeRow(int sourceRowIndex, int targetRowIndex) { DataRow sourceRow = gridView1.GetDataRow(sourceRowIndex); DataRow targetRow = gridView1.GetDataRow(targetRowIndex); //复制源行,再重新添加(直接复制的话,删除源行后复制行也会为空) object[] objArray = sourceRow.ItemArray; DataRow dragRowCopy = dt.NewRow(); dragRowCopy.ItemArray = objArray; sourceRow.Delete(); dt.Rows.InsertAt(dragRowCopy, targetRowIndex); //调整焦点到目标行上 gridView1.FocusedRowHandle = targetRowIndex; }
转载地址:https://blog.csdn.net/xjjatdna/article/details/103951178 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月27日 04时08分59秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何选择合适的数据类型
2019-04-28
学习MySQL(一)
2019-04-28
学习MySQL(二)数据库各项约束
2019-04-28
认识Java
2019-04-28
java中非静态、静态方法的调用、方法中调用方法
2019-04-28
IDEA默认的快捷键整理!!
2019-04-28
超宽带雷达P440?雷达的快时间慢时间是什么意思?
2019-04-28
教育授权certificate used to sign the license
2019-04-28
java中数组为空和数组长度为0的区别
2019-04-28
SecureCRT连接不上虚拟机
2019-04-28
从100万个数中找出最大的前100个数-最小堆、分块
2019-04-28
并发下的ArrayList、HashMap
2019-04-28
仿牛客社区项目2.2登录模块——开发注册功能
2019-04-28
仿牛客社区项目2.3登录模块——会话管理Cookie、Session
2019-04-28
仿牛客社区项目2.4登录模块——生成验证码
2019-04-28