private void EditGroup(NodeView nodeView)
        {
            var cmsWebServiceClient = new CmsWebServiceClient(Utils.WcfBinding, Utils.WcfEndPoint);
            EventHandler<GetComponentTypeGroupCompletedEventArgs> getComponentTypeGroupCompleted = null;

            var existingGroupNames = nodeView.Parent.Children.Where(x => x.Type == NodeType.ComponentTypeGroup).Select(x => x.Name).ToList();
            existingGroupNames.Remove(nodeView.Name);

            getComponentTypeGroupCompleted = (s, eventArgs) =>
            {
                var componentTypeGroup = eventArgs.Result;

                var dialog = new AddEditComponentTypeGroupDialog(componentTypeGroup, existingGroupNames, int.Parse(nodeView.SortField));
                dialog.Show();
                dialog.Closed += (s1, e1) =>
                {
                    if (dialog.DialogResult.HasValue && dialog.DialogResult.Value)
                    {
                        EventHandler<AddEditComponentTypeGroupCompletedEventArgs> editCompleted = null;
                        editCompleted = (s2, e2) =>
                        {
                            var typeGroup = e2.Result;
                            nodeView.Name = typeGroup.Name;
                            nodeView.Description = typeGroup.Description;
                            nodeView.SortField = dialog.Ordinal.ToString();

                            UpdateGroupComponentTypeProperty(GetEquipmentComponentPropertyType(nodeView.Parent), nodeView.Id, dialog.Ordinal);

                            cmsWebServiceClient.AddEditComponentTypeGroupCompleted -= editCompleted;
                            nodeView.Parent.Sort();
                        };

                        cmsWebServiceClient.AddEditComponentTypeGroupCompleted += editCompleted;
                        cmsWebServiceClient.AddEditComponentTypeGroupAsync(GetEquipmentComponentPropertyType(nodeView.Parent), dialog.ComponentTypeGroup);
                    }
                };
                cmsWebServiceClient.GetComponentTypeGroupCompleted -= getComponentTypeGroupCompleted;
            };
            cmsWebServiceClient.GetComponentTypeGroupCompleted += getComponentTypeGroupCompleted;
            cmsWebServiceClient.GetComponentTypeGroupAsync(nodeView.GroupId);
        }
        private void AddNewGroup(NodeView nodeView)
        {
            var cmsWebServiceClient = new CmsWebServiceClient(Utils.WcfBinding, Utils.WcfEndPoint);

            var existingGroupNames = nodeView.Children.Where(x => x.Type == NodeType.ComponentTypeGroup).Select(x => x.Name).ToList();

            var dialog = new AddEditComponentTypeGroupDialog(existingGroupNames);
            dialog.Show();

            dialog.Closed += (s1, e1) =>
            {
                if (dialog.DialogResult.HasValue && dialog.DialogResult.Value)
                {
                    EventHandler<AddEditComponentTypeGroupCompletedEventArgs> addCompleted = null;
                    addCompleted = (s2, eventArgs) =>
                    {
                        var componentTypeGroup = eventArgs.Result;

                        if (componentTypeGroup != null)
                        {
                            cmsWebServiceClient.AddGroupComponentTypePropertyCompleted += (s, e) =>
                            {
                                var child = new NodeView(nodeView)
                                {
                                    Id = e.Result, //ComponentTypePropertyId
                                    GroupId = componentTypeGroup.Id,
                                    Name = dialog.ComponentTypeGroup.Name,
                                    Description = dialog.ComponentTypeGroup.Description,
                                    Icon = "/CmsEquipmentDatabase;component/Images/Configuration.png",
                                    Type = NodeType.ComponentTypeGroup,
                                    HasChildren = true,
                                    SortField = dialog.Ordinal.ToString()
                                };
                                if (nodeView.ChildrenLoaded)
                                {
                                    nodeView.Children.Add(child);
                                    nodeView.Sort();
                                }
                            };

                            var controlSystemComponentTypeId = nodeView.Parent.Id;
                            var ordinal = dialog.Ordinal;
                            var componentTypeGroupId = componentTypeGroup.Id;

                            //This will add new row to the Equipment ComponentTypeProperty and mark it as Group
                            cmsWebServiceClient.AddGroupComponentTypePropertyAsync(GetEquipmentComponentPropertyType(nodeView), controlSystemComponentTypeId, componentTypeGroupId, ordinal);
                        }
                        cmsWebServiceClient.AddEditComponentTypeGroupCompleted -= addCompleted;
                    };

                    cmsWebServiceClient.AddEditComponentTypeGroupCompleted += addCompleted;
                    cmsWebServiceClient.AddEditComponentTypeGroupAsync(GetEquipmentComponentPropertyType(nodeView), dialog.ComponentTypeGroup);
                }
            };
        }