示例#1
0
        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);
        }