protected override void f_TreeView_DragDrop(object sender, DragEventArgs e, Ctrl_TreeNodeGroup a_TargetNodeGroup) { if (a_TargetNodeGroup != null) { using (var transaction = Cl_App.m_DataContext.Database.BeginTransaction()) { try { Ctrl_TreeNodeTemplate draggedNodeTemplate = (Ctrl_TreeNodeTemplate)e.Data.GetData(typeof(Ctrl_TreeNodeTemplate)); if (e.Effect == DragDropEffects.Move) { Cl_EntityLog eLog = new Cl_EntityLog(); eLog.f_SetEntity(draggedNodeTemplate.p_Template); var elsDraggeds = Cl_App.m_DataContext.p_Templates.Where(el => el.p_TemplateID == draggedNodeTemplate.p_Template.p_TemplateID); if (elsDraggeds != null) { bool isChange = false; foreach (Cl_Template el in elsDraggeds) { el.p_ParentGroupID = a_TargetNodeGroup.p_Group.p_ID; isChange = true; } if (isChange) { Cl_App.m_DataContext.SaveChanges(); eLog.f_SaveEntity(draggedNodeTemplate.p_Template); transaction.Commit(); draggedNodeTemplate.Remove(); a_TargetNodeGroup.Nodes.Insert(f_GetFirstGroupInNode(a_TargetNodeGroup.Nodes), draggedNodeTemplate); } } else { MonitoringStub.Error("Error_Tree", "Не найден шаблон", new Exception("EX ERROR"), "draggedNodeTemplate.p_Template.p_TemplateID = " + draggedNodeTemplate.p_Template.p_TemplateID, null); } } } catch (Exception ex) { transaction.Rollback(); MonitoringStub.Error("Error_Tree", "При перемещении шаблона произошла ошибка", ex, null, null); return; } } } }
private void f_DragNewTemplate(Ctrl_TreeNodeTemplate a_NodeTemplate, int a_PosX, int a_PosY) { if (a_NodeTemplate == null) { return; } if (a_NodeTemplate.p_Template == null) { return; } Ctrl_Template ctrlEl = new Ctrl_Template(); Cl_TemplatesFacade.f_GetInstance().f_LoadTemplatesElements(a_NodeTemplate.p_Template); ctrlEl.p_Template = a_NodeTemplate.p_Template; ctrlEl.Name = f_CreateName(ctrlEl.p_Name); Items.Add(ctrlEl); this.Invalidate(this.InsertionIndex); this.InsertionIndex = InvalidIndex; ctrlMenuDel.Visible = Items.Count > 0; }
protected override void OnDragDrop(DragEventArgs drgevent) { string[] formats = drgevent.Data.GetFormats(); foreach (string format in formats) { var item = drgevent.Data.GetData(format); if (item is Ctrl_TreeNodeElement || item is Ctrl_TreeNodeTemplate) { if (item is Ctrl_TreeNodeElement) { Ctrl_TreeNodeElement nodeEl = (Ctrl_TreeNodeElement)item; if (f_HasElement(nodeEl.p_Element) || nodeEl.p_Element.p_Version == 0) { MonitoringStub.Warning("Элемент уже в шаблоне"); return; } } else if (item is Ctrl_TreeNodeTemplate) { Ctrl_TreeNodeTemplate nodeTemp = (Ctrl_TreeNodeTemplate)item; if (f_HasElement(nodeTemp.p_Template) || nodeTemp.p_Template.p_Version == 0) { MonitoringStub.Warning("Элемент уже в шаблоне"); return; } } } } if (this.IsDragging) { try { if (this.InsertionIndex != InvalidIndex) { int dragIndex; int dropIndex; dragIndex = (int)drgevent.Data.GetData(typeof(int)); dropIndex = this.InsertionIndex; if (dragIndex < dropIndex) { dropIndex--; } if (this.InsertionMode == I_InsertionMode.After && dragIndex < this.Items.Count - 1) { dropIndex++; } if (dropIndex != dragIndex) { //Point clientPoint = this.PointToClient(new Point(drgevent.X, drgevent.Y)); //args = new ListBoxItemDragEventArgs(dragIndex, dropIndex, this.InsertionMode, clientPoint.X, clientPoint.Y); //this.OnItemDrag(args); //if (!args.Cancel) { object dragItem; dragItem = this.Items[dragIndex]; this.Items.Remove(dragIndex); this.Items.Insert(dropIndex, dragItem); this.SelectedItem = dragItem; } } } } finally { this.Invalidate(this.InsertionIndex); this.InsertionIndex = InvalidIndex; this.InsertionMode = I_InsertionMode.None; this.IsDragging = false; } } else { if (drgevent.Data.GetData(drgevent.Data.GetFormats()[0]) is Ctrl_TreeNodeElement) { f_DragNewElement(drgevent.Data.GetData(drgevent.Data.GetFormats()[0]) as Ctrl_TreeNodeElement, drgevent.X, drgevent.Y); } else if (drgevent.Data.GetData(drgevent.Data.GetFormats()[0]) is Ctrl_TreeNodeTemplate) { f_DragNewTemplate(drgevent.Data.GetData(drgevent.Data.GetFormats()[0]) as Ctrl_TreeNodeTemplate, drgevent.X, drgevent.Y); } } base.OnDragDrop(drgevent); }