代码之家  ›  专栏  ›  技术社区  ›  climivin

为什么事件“gridControl1\u DragDrop”和“gridControl1\u DragOver”不起作用

  •  0
  • climivin  · 技术社区  · 6 年前

    DevExpress 17.2.7

    我尝试在网格内移动一行
    元素“用户控件”放置在“gridControl1”中。

    代码包含以下事件:
    -“gridView1_MouseDown”;

    -“gridControl1_DragOver”;

    事件“gridView1\u MouseDown”、“gridView1\u MouseMove”起作用。

    事件“gridControl1\u DragOver”、“gridControl1\u DragDrop”不起作用。

    如何使“gridControl1\u DragOver”、“gridControl1\u DragDrop”事件工作?

    enter image description here enter image description here enter image description here

    public partial class Frm10UC : UserControl
        {
            #region *** Переменные
            // *** Переменные
            ConectDB conectDB;
    
            #region Перетаскивание 
            #region *** Сортировка
            const string OrderFieldName = "sorting";
            #endregion ** 
    
            #endregion
    
            #endregion *** Переменные
    
            public Frm10UC()
            {
                InitializeComponent();
            }
    
            private void Frm10UC_Load(object sender, EventArgs e)
            {
                // Подключение к БД
                // conectDB = new ConectDB(Convert.ToInt32(aIncement));
                conectDB = new ConectDB();
                conectDB.connect();
    
                // gridControl. Заполнение данными
                gridControl1.DataSource = conectDB.dt;
                gridView1.BestFitColumns();
    
                // Строка. Добавить "Новую запись"
                // Отображение строки нового элемента для добавления строк в представление.
                gridView1.OptionsView.NewItemRowPosition = NewItemRowPosition.Top; // Available modes: Top, Bottom, None (// Доступные режимы: сверху, снизу, нет)            
    
                // Сортировка
                // SortData();
    
                #region *** Сортировка
                gridView1.PopulateColumns(); // Создает столбцы сетки/поля карты для полей в связанном источнике данных View.
    
                gridView1.Columns[OrderFieldName].SortOrder = DevExpress.Data.ColumnSortOrder.Ascending; //Сортировка.  "Ascending" - по возрастанию
                gridView1.OptionsCustomization.AllowSort = false; // Получает или задает значение, определяющее, могут ли конечные пользователи применять сортировку данных .
    
                gridView1.OptionsView.ShowGroupPanel = false; // Возвращает или задает значение, определяющее, является ли панель группы видимой.
                #endregion *** Сортировка
            }
    
            #region *** События
    
            GridHitInfo downHitInfo = null; // Содержит информацию о конкретной точке в виде сетки .
            // https://documentation.devexpress.com/WindowsForms/DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo.members
            private void gridView1_MouseDown(object sender, MouseEventArgs e)
            {
                GridView view = sender as GridView;
                downHitInfo = null;
    
                GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y));
                if (Control.ModifierKeys != Keys.None)
                    return;
                if (e.Button == MouseButtons.Left && hitInfo.InRow && hitInfo.RowHandle != GridControl.NewItemRowHandle)
                    downHitInfo = hitInfo;
            }
    
            private void gridView1_MouseMove(object sender, MouseEventArgs e)
            {
                GridView view = sender as GridView;
                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)))
                    {
                        view.GridControl.DoDragDrop(downHitInfo, DragDropEffects.All);
                        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;
    
                    GridControl grid = sender as GridControl;
                    GridView view = grid.MainView as GridView;
                    GridHitInfo hitInfo = view.CalcHitInfo(grid.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) //когда операция перетаскивания завершена; 
            {
                GridControl grid = sender as GridControl;
                GridView view = grid.MainView as GridView;
                GridHitInfo srcHitInfo = e.Data.GetData(typeof(GridHitInfo)) as GridHitInfo;
                GridHitInfo hitInfo = view.CalcHitInfo(grid.PointToClient(new Point(e.X, e.Y)));
                int sourceRow = srcHitInfo.RowHandle;
                int targetRow = hitInfo.RowHandle;
                MoveRow(sourceRow, targetRow);
            }
    
            private void MoveRow(int sourceRow, int targetRow)
            {
                if (sourceRow == targetRow)
                    return;
                GridView view = gridView1;
    
                DataRow row0 = null;
                DataRow row1 = null;
                DataRow row2 = null;
    
                decimal val1 = 0;
                decimal val2 = 0;
    
                if (targetRow == sourceRow + 1)
                {
                    row1 = view.GetDataRow(sourceRow);
                    row2 = view.GetDataRow(targetRow);
                    val1 = (decimal)row1[OrderFieldName];
                    val2 = (decimal)row2[OrderFieldName];
                    row1[OrderFieldName] = val2;
                    row2[OrderFieldName] = val1;
    
                    view.FocusedRowHandle = sourceRow + 1;
                    return;
                }
    
                if (sourceRow == targetRow + 1)
                {
                    row1 = view.GetDataRow(sourceRow);
                    row2 = view.GetDataRow(targetRow);
                    val1 = (decimal)row1[OrderFieldName];
                    val2 = (decimal)row2[OrderFieldName];
                    row1[OrderFieldName] = val2;
                    row2[OrderFieldName] = val1;
    
                    view.FocusedRowHandle = sourceRow - 1;
                    return;
                }
    
    
                row0 = view.GetDataRow(targetRow - 1);
                row1 = view.GetDataRow(targetRow);
                row2 = view.GetDataRow(targetRow + 1);
                DataRow dragRow = view.GetDataRow(sourceRow);
                val1 = (decimal)row1[OrderFieldName];
                if (row2 == null)
                    dragRow[OrderFieldName] = val1 + 1;
                else
                {
                    val2 = (decimal)row2[OrderFieldName];
                    if (row0 == null)
                        dragRow[OrderFieldName] = val1 - 1;
                    else
                        dragRow[OrderFieldName] = (val1 + val2) / 2;
                }
            }
            #endregion *** События
    
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   IanGSY    6 年前

    你定好了吗 AllowDrop GridView控件的属性 ?