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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:GridControl分页
下一篇:RDLC报表打印尺寸不匹配的问题

发表评论

最新留言

不错!
[***.144.177.141]2024年04月13日 13时20分29秒