partial void UpdateHelpDesk_Category(HelpDesk_Category instance);
 partial void DeleteHelpDesk_Category(HelpDesk_Category instance);
 partial void InsertHelpDesk_Category(HelpDesk_Category instance);
        private void AddChildren(ListItemCollection colListItemCollection, HelpDesk_Category objHelpDesk_Category, int BranchNotToShow)
        {

            // Get the children of the current item
            // This method may be called from the top level or recuresively by one of the child items
            var ChildResults = from WebserverCategories in EntireTable
                               where WebserverCategories.ParentCategoryID == objHelpDesk_Category.CategoryID
                               where WebserverCategories.CategoryID != BranchNotToShow
                               select WebserverCategories;

            // Loop thru each item
            foreach (HelpDesk_Category objCategory in ChildResults)
            {
                // Create a new list item to add to the collection
                ListItem objChildListItem = new ListItem();
                // AddDots method is used to add the dots to indicate the item is a sub item
                objChildListItem.Text = String.Format("{0}{1}", AddDots(objCategory.Level), objCategory.CategoryName);
                objChildListItem.Value = objCategory.CategoryID.ToString();
                colListItemCollection.Add(objChildListItem);

                //Recursively call the AddChildren method adding all children
                AddChildren(colListItemCollection, objCategory, BranchNotToShow);
            }
        }
        protected void btnDelete_Click(object sender, EventArgs e)
        {
            HelpDeskDALDataContext objHelpDeskDALDataContext = new HelpDeskDALDataContext();

            // Get the node
            var result = (from HelpDesk_Categories in objHelpDeskDALDataContext.HelpDesk_Categories
                          where HelpDesk_Categories.CategoryID == Convert.ToInt32(txtCategoryID.Text)
                          select HelpDesk_Categories).FirstOrDefault();

            // Make a Temp object to use to update the child nodes
            HelpDesk_Category TmpHelpDesk_Category = new HelpDesk_Category();
            TmpHelpDesk_Category.CategoryID = result.CategoryID;
            if (result.ParentCategoryID == null)
            {
                TmpHelpDesk_Category.Level = 0;
            }
            else
            {
                TmpHelpDesk_Category.Level = GetLevelOfParent(result.ParentCategoryID);
            }

            // Get all TaskCategories that use the Node
            var colTaskCategories = from HelpDesk_TaskCategories in objHelpDeskDALDataContext.HelpDesk_TaskCategories
                                    where HelpDesk_TaskCategories.CategoryID == Convert.ToInt32(txtCategoryID.Text)
                                    select HelpDesk_TaskCategories;

            // Delete them
            objHelpDeskDALDataContext.HelpDesk_TaskCategories.DeleteAllOnSubmit(colTaskCategories);
            objHelpDeskDALDataContext.SubmitChanges();

            // Delete the node
            objHelpDeskDALDataContext.HelpDesk_Categories.DeleteOnSubmit(result);
            objHelpDeskDALDataContext.SubmitChanges();

            // Update levels of all the Children            
            UpdateLevelOfChildren(TmpHelpDesk_Category);

            // Update all the children nodes to give them a new parent
            var CategoryChildren = from HelpDesk_Categories in objHelpDeskDALDataContext.HelpDesk_Categories
                                   where HelpDesk_Categories.ParentCategoryID == result.CategoryID
                                   select HelpDesk_Categories;

            // Loop thru each item
            foreach (var objCategory in CategoryChildren)
            {
                objCategory.ParentCategoryID = result.ParentCategoryID;
                objHelpDeskDALDataContext.SubmitChanges();
            }

            // Delete the Catagory from any Ticket that uses it
            var DeleteHelpDesk_TaskCategories = from HelpDesk_TaskCategories in objHelpDeskDALDataContext.HelpDesk_TaskCategories
                                                where HelpDesk_TaskCategories.CategoryID == TmpHelpDesk_Category.CategoryID
                                                select HelpDesk_TaskCategories;

            objHelpDeskDALDataContext.HelpDesk_TaskCategories.DeleteAllOnSubmit(DeleteHelpDesk_TaskCategories);
            objHelpDeskDALDataContext.SubmitChanges();

            RefreshCache();

            // Set the CategoryID
            txtCategoryID.Text = (result.ParentCategoryID == null) ? "" : result.ParentCategoryID.ToString();

            DisplayHelpDesk();
            SelectTreeNode();
        }
        private void UpdateLevelOfChildren(HelpDesk_Category result)
        {
            int? intStartingLevel = result.Level;

            if (colProcessedCategoryIDs == null)
            {
                colProcessedCategoryIDs = new List<int>();
            }

            HelpDeskDALDataContext objHelpDeskDALDataContext = new HelpDeskDALDataContext();

            // Get the children of the current item
            // This method may be called from the top level or recuresively by one of the child items
            var CategoryChildren = from HelpDesk_Categories in objHelpDeskDALDataContext.HelpDesk_Categories
                                   where HelpDesk_Categories.ParentCategoryID == result.CategoryID
                                   where !colProcessedCategoryIDs.Contains(result.CategoryID)
                                   select HelpDesk_Categories;

            // Loop thru each item
            foreach (var objCategory in CategoryChildren)
            {
                colProcessedCategoryIDs.Add(objCategory.CategoryID);

                objCategory.Level = ((intStartingLevel) ?? 0) + 1;
                objHelpDeskDALDataContext.SubmitChanges();

                //Recursively call the UpdateLevelOfChildren method adding all children
                UpdateLevelOfChildren(objCategory);
            }
        }
        protected void btnUpdate_Click(object sender, EventArgs e)
        {
            HelpDeskDALDataContext objHelpDeskDALDataContext = new HelpDeskDALDataContext();

            if (btnUpdate.CommandName == "Update")
            {
                var result = (from HelpDesk_Categories in objHelpDeskDALDataContext.HelpDesk_Categories
                              where HelpDesk_Categories.CategoryID == Convert.ToInt32(txtCategoryID.Text)
                              select HelpDesk_Categories).FirstOrDefault();

                result.CategoryName = txtCategory.Text.Trim();

                result.ParentCategoryID = (GetParentCategoryID(ddlParentCategory.SelectedValue) == "0") ? (int?)null : Convert.ToInt32(ddlParentCategory.SelectedValue);
                txtParentCategoryID.Text = (ddlParentCategory.SelectedValue == "0") ? "" : ddlParentCategory.SelectedValue;

                result.Level = (ddlParentCategory.SelectedValue == "0") ? 1 : GetLevelOfParent(Convert.ToInt32(ddlParentCategory.SelectedValue)) + 1;
                result.RequestorVisible = chkRequesterVisible.Checked;
                result.Selectable = chkSelectable.Checked;

                objHelpDeskDALDataContext.SubmitChanges();

                // Update levels off all the Children
                colProcessedCategoryIDs = new List<int>();
                UpdateLevelOfChildren(result);
            }
            else
            {
                // This is a Save for a new Node                

                HelpDesk_Category objHelpDesk_Category = new HelpDesk_Category();
                objHelpDesk_Category.PortalID = PortalId;
                objHelpDesk_Category.CategoryName = txtCategory.Text.Trim();
                objHelpDesk_Category.ParentCategoryID = (GetParentCategoryID(ddlParentCategory.SelectedValue) == "0") ? (int?)null : Convert.ToInt32(ddlParentCategory.SelectedValue);
                objHelpDesk_Category.Level = (ddlParentCategory.SelectedValue == "0") ? 1 : GetLevelOfParent(Convert.ToInt32(ddlParentCategory.SelectedValue)) + 1;
                objHelpDesk_Category.RequestorVisible = chkRequesterVisible.Checked;
                objHelpDesk_Category.Selectable = chkSelectable.Checked;

                objHelpDeskDALDataContext.HelpDesk_Categories.InsertOnSubmit(objHelpDesk_Category);
                objHelpDeskDALDataContext.SubmitChanges();

                // Set the Hidden CategoryID
                txtParentCategoryID.Text = (objHelpDesk_Category.ParentCategoryID == null) ? "" : ddlParentCategory.SelectedValue;
                txtCategoryID.Text = objHelpDesk_Category.CategoryID.ToString();
                ResetForm();
            }

            RefreshCache();
            DisplayHelpDesk();

            // Set the Parent drop-down
            if (txtParentCategoryID.Text != "")
            {
                ddlParentCategory.SelectedValue = txtParentCategoryID.Text;
            }
        }