protected override void ProcessDragDrop(Point dropLocation, ISupportDrag dragObject) { object dataContext = dragObject.GetDataContext(); RadPosition dropPosition = RadGridViewDragDropService.GetDropPosition(dropLocation, this.Size); ColumnGroupsViewDefinition viewDefinition = this.ViewTemplate.ViewDefinition as ColumnGroupsViewDefinition; if (viewDefinition != null) { if (dataContext is GridViewColumnGroup) { ((GridViewColumnGroup)dataContext).IsVisible = true; this.TableElement.UpdateLayout(); if (!this.ViewTemplate.AllowColumnReorder) { return; } this.DropColumnGroup(viewDefinition, (GridViewColumnGroup)dataContext, dropPosition); return; } if (dataContext is GridViewDataColumn || dataContext is GridViewGroupColumn) { this.DropInColumnGroupsView(viewDefinition, dataContext as GridViewColumn, dropPosition); return; } } base.ProcessDragDrop(dropLocation, dragObject); }
protected override void DropInColumnGroupsView( ColumnGroupsViewDefinition view, GridViewColumn column, RadPosition dropPosition) { GridViewDataColumn gridViewDataColumn = column as GridViewDataColumn; if (gridViewDataColumn != null) { if (this.ViewTemplate.AllowColumnReorder && this.GridViewGroupColumn.Group.Groups.Count == 0) { GridViewColumnGroupRow row = this.FindRow(view.ColumnGroups, (GridViewColumn)gridViewDataColumn); if (this.GridViewGroupColumn.Group != null && this.GridViewGroupColumn.Group.Rows.Count == 0 && (dropPosition & RadPosition.Bottom) != RadPosition.None) { this.GridViewGroupColumn.Group.Rows.Add(new GridViewColumnGroupRow()); } if (this.GridViewGroupColumn.Group != null && this.GridViewGroupColumn.Group.Rows.Count > 0) { if (row != null) { row.ColumnNames.Remove(gridViewDataColumn.Name); if (row.ColumnNames.Count == 0) { this.FindGroup(view.ColumnGroups, row)?.Rows.Remove(row); } } if ((dropPosition & RadPosition.Left) != RadPosition.None) { this.GridViewGroupColumn.Group.Rows[0].ColumnNames.Insert(0, gridViewDataColumn.Name); } else { this.GridViewGroupColumn.Group.Rows[0].ColumnNames.Add(gridViewDataColumn.Name); } } } if (!column.IsVisible && this.GridViewGroupColumn.Group.Groups.Count == 0) { column.IsVisible = true; } else { ColumnGroupRowLayout rowLayout = this.TableElement.ViewElement.RowLayout as ColumnGroupRowLayout; rowLayout.InvalidateLayout(); rowLayout.InvalidateRenderColumns(); this.TableElement.ViewElement.UpdateRows(true); } } else { if (!(column is GridViewGroupColumn)) { return; } this.DropColumnGroup(view, ((GridViewGroupColumn)column).Group, dropPosition); } }
protected override void PerformStop() { SnapshotDragItem context = this.Context as SnapshotDragItem; if (context != null) { context.Capture = false; context.Item.IsMouseDown = false; } base.PerformStop(); this.DisposeDragHint(); this.dragDropBehavior = (IGridDragDropBehavior)null; this.lastDropPosition = RadPosition.None; }
private void DropColumnGroup( ColumnGroupsViewDefinition view, GridViewColumnGroup group, RadPosition dropPosition) { ColumnGroupCollection groupCollection1 = this.FindGroupCollection(view, this.GridViewGroupColumn.Group); ColumnGroupCollection groupCollection2 = this.FindGroupCollection(view, group); int index = groupCollection1.IndexOf(this.GridViewGroupColumn.Group); if (groupCollection1 == groupCollection2 && groupCollection2 != null && groupCollection2.IndexOf(group) < index) { --index; } if (group.Parent != null) { group.Parent.Groups.Remove(group); } else { view.ColumnGroups.Remove(group); } if ((dropPosition & RadPosition.Bottom) != RadPosition.None && this.GridViewGroupColumn.Group.Rows.Count == 0) { this.GridViewGroupColumn.Group.Groups.Add(group); } else if ((dropPosition & RadPosition.Left) != RadPosition.None) { groupCollection1.Insert(index, group); } else if (index < groupCollection1.Count - 1) { groupCollection1.Remove(group); groupCollection1.Insert(index + 1, group); } else { groupCollection1.Add(group); } if (!group.IsVisible) { group.IsVisible = true; } ColumnGroupRowLayout rowLayout = this.TableElement.ViewElement.RowLayout as ColumnGroupRowLayout; rowLayout.InvalidateLayout(); rowLayout.InvalidateRenderColumns(); this.TableElement.ViewElement.UpdateRows(true); }
internal static RadPosition GetDropPosition(Point dropLocation, Size size) { RadPosition radPosition1 = RadPosition.None; int num1 = size.Width / 2; int num2 = size.Width / 3; int num3 = 2 * size.Width / 3; RadPosition radPosition2 = dropLocation.X > num1 ? radPosition1 | RadPosition.Right : radPosition1 | RadPosition.Left; if (num2 < dropLocation.X && dropLocation.X < num3) { int num4 = size.Height / 2; if (dropLocation.Y <= num4) { radPosition2 |= RadPosition.Top; } else { radPosition2 |= RadPosition.Bottom; } } return(radPosition2); }
protected override void HandleMouseMove(Point mousePosition) { ISupportDrop dropTarget = this.DropTarget; this.AutoScroll(); base.HandleMouseMove(mousePosition); RadElement radElement = dropTarget as RadElement; RadPosition radPosition = RadPosition.None; if (radElement != null) { radPosition = RadGridViewDragDropService.GetDropPosition(radElement.PointFromScreen(mousePosition), radElement.ControlBoundingRectangle.Size); } if (dropTarget != this.DropTarget || dropTarget == null || radPosition != this.lastDropPosition) { this.SetDragDropBehavior(); } this.lastDropPosition = radPosition; if (this.dragHintWindow == null) { return; } this.UpdateDragHintLocation(mousePosition); }