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"); } }
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(); }
public void addChild(ModelDirectory dir) { children.Add(dir); }