zoukankan      html  css  js  c++  java
  • dev gridview拖拽数据移动

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

     

    private BindingList<T> DataSource;
    //dvginfo根据鼠标点击的x、y坐标获取该点的相关信息
    private
    GridHitInfo downHitInfo; private GridHitInfo upHitInfo; private void frmToExcelModel_Load(object sender, EventArgs e) { Init(); dvginfo.AllowDrop = true; // 确保能够拖拽
    DataSource = new BindingList<T>();
    dvginfo.DataSource
    =DataSource;
            }
    private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
            {
                e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
                if (e.Info.IsRowIndicator)
                {
                    if (e.RowHandle >= 0)
                    {
                        e.Info.DisplayText = (e.RowHandle + 1).ToString();
                    }
                    else if (e.RowHandle < 0 && e.RowHandle > -1000)
                    {
                        e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite;
                        e.Info.DisplayText = "G" + e.RowHandle.ToString();
                    }
                }
            }
     #region 数据源拖拽
            private void dvginfo_MouseDown(object sender, MouseEventArgs e)
            {
                downHitInfo = gridView1.CalcHitInfo(new Point(e.X, e.Y));
            }
    
            private void dvginfo_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<ColunmData> linemodels = new List<ColunmData>();
                foreach (int r in rows)   // 获取gridview 数据源中对应的信息。
                {
                    //根据 gridview 中的行索引获取数据源中对应的是行索引
                    int dataSourcerows = gridView1.GetDataSourceRowIndex(r);
                    linemodels.Add(DataSouse[dataSourcerows]);
                }
                dvginfo.DoDragDrop(linemodels, DragDropEffects.Move);//开始拖放操作。
    
            }
            //拖拽过程事件     
            private void dvginfo_DragOver(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.Move;
            }
            //拖拽完成后事件  
            private void dvginfo_DragDrop(object sender, DragEventArgs e)
            {
                //获取鼠标在屏幕上的位置。
                Point gridviewPoint = this.PointToScreen(this.dvginfo.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<ColunmData> row = e.Data.GetData(typeof(List<ColunmData>)) as List<ColunmData>;  //获取要移动的数据
                if (row != null && row.Count > 0) //没有移动的数据跳过
                {
                    int a;
                    //获取移动列集合的第一列在数据源的索引
                    int startRow = DataSouse.IndexOf(row[0]);
                    ColunmData xs = DataSouse[endRow];
                    if (!row.Contains(xs))  //如果多选的话,确保不能拖拽到这几个里
                    {
                        gridView1.ClearSelection();
                        //排序,先删除后后添加,
                        for (int i = 0; i < row.Count; i++)
                            DataSouse.Remove(row[i]);
                        //若果往上托,则加在鼠标到达行的上面
                        //如果往下拖,则加在鼠标到达行的下面
                        if (startRow > endRow)
                            a = DataSouse.IndexOf(xs);
                        else
                            a = DataSouse.IndexOf(xs) + 1;
                        for (int i = 0; i < row.Count; i++)
                        {
                            DataSouse.Insert(a + i, row[i]);
                            gridView1.SelectRow(a + i);
                        }
                        gridView1.FocusedRowHandle = a;
                    }
                }
                dvginfo.DataSource = DataSouse;
                gridView1.RefreshData();
            }
            #endregion
  • 相关阅读:
    Maven发布工程到公共库
    js一些代码方法
    我的语录
    java 安装配置时出现的问题
    HDUOJ----4501小明系列故事——买年货(三维背包)
    message 弹出窗口
    2014校招 百度试题及答案
    HDUOJ---1862EXCEL排序
    HDUOJ-----3591The trouble of Xiaoqian
    HDUOJ-----2571跳舞毯
  • 原文地址:https://www.cnblogs.com/shuaimeng/p/9999297.html
Copyright © 2011-2022 走看看