void IDropTarget.Drop(UIElement draggedElement) { ColumnManagerCell cell = draggedElement as ColumnManagerCell; if (cell == null) { return; } HierarchicalGroupByControl parentGBC = GroupingHelper.GetHierarchicalGroupByControl(this); if (parentGBC == null) { throw new DataGridInternalException("The hierarchical group-by control node must be rooted by a HierarchicalGroupByControl."); } DataGridContext dataGridContext = DataGridControl.GetDataGridContext(this); DataGridControl parentGrid = (dataGridContext != null) ? dataGridContext.DataGridControl : null; GroupingHelper.AppendNewGroupFromColumnManagerCell(cell, parentGrid); // Notify groups have changed for NoGroupContent parentGBC.UpdateHasGroups(); HierarchicalGroupByControlNode hierarchicalGroupByControlNode = parentGBC.GetHierarchicalGroupByControlNodeFromColumnManagerCell(cell); if (hierarchicalGroupByControlNode == null) { return; } hierarchicalGroupByControlNode.HideFarDropMark(cell); this.HideFarDropMark(); }
void IDropTarget.DragLeave(UIElement draggedElement) { ColumnManagerCell cell = draggedElement as ColumnManagerCell; if (cell != null) { HierarchicalGroupByControl parentGBC = GroupingHelper.GetHierarchicalGroupByControl(this); if (parentGBC == null) { throw new DataGridInternalException("The hierarchical group-by control node must be rooted by a HierarchicalGroupByControl."); } HierarchicalGroupByControlNode hierarchicalGroupByControlNode = parentGBC.GetHierarchicalGroupByControlNodeFromColumnManagerCell(cell); if (hierarchicalGroupByControlNode == null) { throw new DataGridInternalException("A HierarchicalGroupByControlNode must exist for every level."); } hierarchicalGroupByControlNode.HideFarDropMark(cell); } else { HierarchicalGroupByItem hierarchicalGroupByItem = draggedElement as HierarchicalGroupByItem; if (hierarchicalGroupByItem == null) { return; } HierarchicalGroupByControlNode draggedHierarchicalGroupByControlNode = HierarchicalGroupByItem.GetParentHierarchicalGroupByControlNode(hierarchicalGroupByItem); if (draggedHierarchicalGroupByControlNode == null) { throw new DataGridInternalException("draggedHierarchicalGroupByControlNode is null."); } if (draggedHierarchicalGroupByControlNode.GroupLevelDescriptions == this.GroupLevelDescriptions) { this.HideFarDropMark(); } else { // This HierarchicalGroupByItem does not belong this parent HierarchicalGroupByControlNode, display the DropMark on the correct one HierarchicalGroupByControl parentGBC = GroupingHelper.GetHierarchicalGroupByControl(this); Debug.Assert(parentGBC != null); if (parentGBC == null) { throw new DataGridInternalException("The hierarchical group-by control node must be rooted by a HierarchicalGroupByControl"); } HierarchicalGroupByControlNode hierarchicalGroupByControlNode = parentGBC.GetHierarchicalGroupByControlNodeFromHierarchicalGroupByItem(hierarchicalGroupByItem); Debug.Assert(hierarchicalGroupByControlNode != null, "CanDrop should have returned false"); if (hierarchicalGroupByControlNode == null) { throw new DataGridInternalException("A HierarchicalGroupByControlNode must exist for every level."); } hierarchicalGroupByControlNode.HideFarDropMark(); } } }
void IDropTarget.DragOver(UIElement draggedElement, Point mousePosition) { ColumnManagerCell cell = draggedElement as ColumnManagerCell; if (cell != null) { DataGridContext draggedCellDataGridContext = DataGridControl.GetDataGridContext(cell); HierarchicalGroupByControlNode draggedOverHierarchicalGroupByControlNode = HierarchicalGroupByItem.GetParentHierarchicalGroupByControlNode(this); if (draggedCellDataGridContext == null) { throw new DataGridInternalException("A ColumnManagerCell must have a DataGridContext."); } if (draggedOverHierarchicalGroupByControlNode == null) { throw new DataGridInternalException(); } if (draggedOverHierarchicalGroupByControlNode.GroupLevelDescriptions == draggedCellDataGridContext.GroupLevelDescriptions) { this.ShowDropMark(mousePosition); } else { // This ColumnManagerCell does not belong this parent HierarchicalGroupByControlNode, display the DropMark on the correct one HierarchicalGroupByControl parentGBC = GroupingHelper.GetHierarchicalGroupByControl(draggedOverHierarchicalGroupByControlNode); if (parentGBC == null) { throw new DataGridInternalException("The hierarchical group-by item must be rooted by a HierarchicalGroupByControl."); } HierarchicalGroupByControlNode hierarchicalGroupByControlNode = parentGBC.GetHierarchicalGroupByControlNodeFromColumnManagerCell(cell); Debug.Assert(hierarchicalGroupByControlNode != null, "CanDrop should have returned false"); if (hierarchicalGroupByControlNode == null) { throw new DataGridInternalException("A HierarchicalGroupByControlNode must exist for every level."); } hierarchicalGroupByControlNode.ShowFarDropMark(cell, mousePosition); } } else { HierarchicalGroupByItem hierarchicalGroupByItem = draggedElement as HierarchicalGroupByItem; if (hierarchicalGroupByItem == null) { return; } HierarchicalGroupByControlNode draggedHierarchicalGroupByControlNode = HierarchicalGroupByItem.GetParentHierarchicalGroupByControlNode(hierarchicalGroupByItem); HierarchicalGroupByControlNode draggedOverHierarchicalGroupByControlNode = HierarchicalGroupByItem.GetParentHierarchicalGroupByControlNode(this); if (draggedHierarchicalGroupByControlNode == null) { throw new DataGridInternalException(); } if (draggedOverHierarchicalGroupByControlNode == null) { throw new DataGridInternalException(); } if (draggedHierarchicalGroupByControlNode.GroupLevelDescriptions == draggedOverHierarchicalGroupByControlNode.GroupLevelDescriptions) { this.ShowDropMark(mousePosition); } else { // This HierarchicalGroupByItem does not belong this parent HierarchicalGroupByControlNode, display the DropMark on the correct one HierarchicalGroupByControl parentGBC = GroupingHelper.GetHierarchicalGroupByControl(draggedOverHierarchicalGroupByControlNode); if (parentGBC == null) { throw new DataGridInternalException("A hierarchical group-by item must be rooted by a HierarchicalGroupByControl."); } HierarchicalGroupByControlNode hierarchicalGroupByControlNode = parentGBC.GetHierarchicalGroupByControlNodeFromHierarchicalGroupByItem(hierarchicalGroupByItem); Debug.Assert(hierarchicalGroupByControlNode != null, "CanDrop should have returned false"); if (hierarchicalGroupByControlNode == null) { throw new DataGridInternalException("A HierarchicalGroupByControlNode must exist for every level."); } hierarchicalGroupByControlNode.ShowFarDropMark(mousePosition); } } }