private void getDirectories(DBReader reader)
        {
            try
            {
                ModelDirectory  directory;
                string          query         = SqlQueries.getDirectories;
                List <string[]> directoryData = reader.readFromDB(query).getQueryDataAsStrings();
                foreach (string[] row in directoryData)
                {
                    directory          = new ModelDirectory();
                    directory.parentId = row[SqlQueries.getDirectories_parentIdIndex];
                    directory.id       = row[SqlQueries.getDirectories_directoryIdIndex];
                    directory.name     = row[SqlQueries.getDirectories_directoryNameIndex];

                    if (directory.parentId == null || directory.parentId == "")
                    {
                        baseTreeDirectories.Add(directory);
                    }

                    directoryDict.Add(directory.id, directory);
                }

                assignChildren();
            }
            catch (NullReferenceException ex)
            {
                MyMessageBox.display(ex.Message + "  \r\nbłąd getDirectories");
            }
        }
Пример #2
0
        private void writeDirectoryTreeToDB(Dictionary <string, ModelDirectory> checkedDirectories, string selectedRootDirId)
        {
            ModelDirectory dir;
            ModelDirectory parentDir          = null;
            int            maxDirectoryIdInDB = 0;
            int            i     = 0;
            string         query = "";

            if (selectedRootDirId == "")
            {
                selectedRootDirId = "null";                               //gdy użytkownik nie wybierze folderu docelowego, przypinam gałąź do pnia
            }
            foreach (string dirId in checkedDirectories.Keys)
            {
                checkedDirectories.TryGetValue(dirId, out dir);
                query = SqlQueries.insertDirectory.Replace("@directoryName", dir.name);
                dbWriter.executeQuery(query);

                if (i == 0)         //wpis robię przez insert, baza danych automatycznie nadaje kolejne ID, które teraz odczytuję
                {
                    maxDirectoryIdInDB = getMaxDirectoryIdFromDB();
                }
                else
                {
                    maxDirectoryIdInDB++;       //kolejne modele będą miały kolejne ID, nie muszę za każdym razem czytać tylko inkrementuję
                }
                dir.newId = maxDirectoryIdInDB.ToString();
                i++;
            }

            // aktualizuję id parenta każdego katalogu - dopiero teraz,  gdy już dodałem wszystkie katalogi do bazy i mają one przypisane nowe id
            //na tym etapie każdy katalog ma parenta null
            foreach (string dirId in checkedDirectories.Keys)
            {
                checkedDirectories.TryGetValue(dirId, out dir);
                if (dir.parentId != "")                       //tzn gdy gałąź miała parenta w oryginalnej bazie danych
                {
                    checkedDirectories.TryGetValue(dir.parentId, out parentDir);

                    if (parentDir != null)      // parentDir==null występuje to w sytuacji wycięcia kawałka gałęzi; po wycięciu najwyższa gałąź miałaa parenta w oryginalnej bazie danych, jednak nie został on zapisany do pliku
                                                //tak więc w tej bazie gałąź musi zostać przypięta do pnia
                    {
                        query = SqlQueries.updateDirectoryParentId.Replace("@newParentId", parentDir.newId) + dir.newId;
                    }
                    else              //gdy wytnę kawałek gałęzi, to muszę ją podpiąć pod nowego parenta, którym będzie katalog wybrany przez użytkownika
                    {
                        query = SqlQueries.updateDirectoryParentId.Replace("@newParentId", selectedRootDirId) + dir.newId;
                    }
                }
                else            //tzn gdy odetnie się gałąź od pnia, tzn nie ma parenta
                {
                    //jeżeli parent Id był null, tzn gałąź została odcięta od pnia, to podpinam ten katalog pod wybrany przez użytkownika
                    query = SqlQueries.updateDirectoryParentId.Replace("@newParentId", selectedRootDirId) + dir.newId;
                }
                dbWriter.executeQuery(query);
            }
        }
 private void checkChildren(ModelDirectory dir)
 {
     if (dir.isParent())
     {
         List <ModelDirectory> children = dir.children;
         foreach (ModelDirectory child in children)
         {
             TreeNode[] nodes = treeView1.Nodes.Find(child.id, true); //Directory.id to jest TreeNode.Name
             nodes[0].Checked = true;                                 //zawsze jest tylko jedna, bo index jest unikalny
         }
     }
 }
        private TreeNode createDirectoryNode(ModelDirectory dir)
        {
            var dirNode = new TreeNode(dir.name);

            try
            {
                dirNode.Name = dir.id;
                if (dir.isParent())
                {
                    foreach (var child in dir.children)
                    {
                        dirNode.Nodes.Add(createDirectoryNode(child));
                    }
                }
            }
            catch (NullReferenceException ex)
            {
                MyMessageBox.display(ex.Message + "  \r\nbłąd createDirectoryNode");
            }
            return(dirNode);
        }
        private void TreeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            ModelDirectory dir = null;

            directoryDict.TryGetValue(e.Node.Name, out dir);

            if (e.Node.Checked == true)
            {
                if (!checkedDirectories.ContainsKey(dir.id))
                {
                    checkedDirectories.Add(dir.id, dir);
                    checkChildren(dir);
                }
            }
            else
            {
                if (dir != null && checkedDirectories.Keys.Contains(dir.id))
                {
                    checkedDirectories.Remove(dir.id);
                }
            }
            onDirectoryChecked();
        }
Пример #6
0
 public void addChild(ModelDirectory dir)
 {
     children.Add(dir);
 }