Dev GridControl控件行拖拽实现
发布日期:2021-06-28 18:27:45
浏览次数:3
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月13日 13时20分29秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
进阶的微信小程序--获取元素的高度
2019-04-29
Vue电商项目之放大镜插件的使用
2019-04-29
VUE进阶之使用vue-draggable拖拽
2019-04-29
微信小程序特训之父子组件传值
2019-04-29
解除端口占用 Address already in use::8000
2019-04-29
VUE之axios解决跨域方案
2019-04-29
nodeJS学习------拿到数据有RowDataPacket处理
2019-04-29
vue-cli3中引入less,scss等解决方案
2019-04-29
vue使用swiper插件修改左右箭头的默认样式
2019-04-29
【vue系列】在router.js中使用ELEMENT组件
2019-04-29
【vue系列】动态绑定背景图片-本地图片线上图片
2019-04-29
【vue系列】空格失效使用占用符
2019-04-29
【vue系列】2021新建vue项目
2019-04-29
【vue系列】vue创建项目报错 ERROR ~/.vuerc may be outdated. Please delete it and re-run vue-cli in manual mode
2019-04-29
【vue系列】ELEMENT :before-upload 阻止上传PDF等文件
2019-04-29
【VUE系列】antv组件Chart等动态更新视图不更新
2019-04-29
【vue系列】动画数字自加载实现方案
2019-04-29