Der TreeView wird neu eingelesen, da der TreeView mit der DB verbunden ist. Ausserdem arbeite ich auf der DB ja nicht alleine. Wenn ein anderer an dem Baum etwas in der Zwischenzeit etwas ändert, dann brauche ich den aktuellen Stand der DB.
na hier mal Code (es ist ziemlich viel, deswegen selektiere ich mal):
die Ausgangsfkt, die den Baum füllt und die 2 Methode aufruft, die den Baum füllen
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| private void FillTreeView() { TreeNode rootNode = new TreeNode();
rootNode.Text = "DMS"; rootNode.Expand(); rootNode.ContextMenuStrip = this.RootNodeContextMenu; this.treeView1.Nodes.Add(rootNode);
GetVirtualNodes(rootNode);
GetPhysicalNodes(rootNode); } |
Methode: GetVirtualNodes (Nodes die nur in der DB verwaltet werden
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108:
| private void GetVirtualNodes(TreeNode parentNode) { Dictionary<int, TreeNode> virtualNodeDictionary = new Dictionary<int, TreeNode>();
try { SqlConnection connection = new SqlConnection(_connectionString);
connection.Open();
SqlCommand command = new SqlCommand("DMS.FileFolderTreeView", connection); command.CommandType = CommandType.StoredProcedure;
SqlParameter isVirtual = new SqlParameter("@IsVirtual", SqlDbType.Bit); isVirtual.Direction = ParameterDirection.Input; isVirtual.Value = true; command.Parameters.Add(isVirtual); SqlParameter errorText = new SqlParameter("@ErrorText", SqlDbType.NVarChar, 4000); errorText.Direction = ParameterDirection.Output; command.Parameters.Add(errorText);
SqlParameter result = new SqlParameter("@RETURN_VALUE", SqlDbType.Int); result.Direction = ParameterDirection.ReturnValue; command.Parameters.Add(result);
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows) { if (reader.FieldCount >= 6) { while (reader.Read()) { if(!(virtualNodeDictionary.ContainsKey((int)reader["FolderID"]))) { DMSTreeNodeData folderNodeData = new DMSTreeNodeData((int)reader["FolderID"], DMSType.VirtualFolder); TreeNode folderNode = new TreeNode();
folderNode.Text = reader["Folder"].ToString(); folderNode.Tag = folderNodeData; folderNode.ImageIndex = 0; folderNode.SelectedImageIndex = 1; folderNode.ContextMenuStrip = this.FolderNodeContextMenu;
if (reader["ParentID"] != null && reader["ParentID"] != DBNull.Value && virtualNodeDictionary.ContainsKey((int)reader["ParentID"])) { virtualNodeDictionary[(int)reader["ParentID"]].Nodes.Add(folderNode); } else { parentNode.Nodes.Add(folderNode); } virtualNodeDictionary.Add((int)reader["FolderID"], folderNode); }
if (reader["FileID"].ToString() != "") { DMSTreeNodeData fileNodeData = new DMSTreeNodeData((int)reader["FileID"], DMSType.VirtualFile);
TreeNode fileNode = new TreeNode();
if (!String.IsNullOrEmpty(reader["AltFileName"].ToString())) fileNode.Text = reader["AltFileName"].ToString(); else fileNode.Text = reader["Name"].ToString(); fileNode.Tag = fileNodeData; fileNode.ImageIndex = 2; fileNode.SelectedImageIndex = 2; fileNode.ContextMenuStrip = this.fileContextMenu;
virtualNodeDictionary[(int)reader["FolderID"]].Nodes.Add(fileNode); } } } } reader.Close();
connection.Close();
} catch (Exception e) { String errorMsg = "Get Virtual TreeNodes: " + e.ToString(); _log.Error(errorMsg); } } |
Methode: GetPhysicalNodes (Nodes die auch im Dateisystem verwaltet werden
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112:
| private void GetPhysicalNodes(TreeNode parentNode) { Dictionary<int, TreeNode> physicalNodeDictionary = new Dictionary<int, TreeNode>();
try { SqlConnection connection = new SqlConnection(_connectionString);
connection.Open();
SqlCommand command = new SqlCommand("DMS.FileFolderTreeView", connection);
command.CommandType = CommandType.StoredProcedure;
SqlParameter isVirtual = new SqlParameter("@IsVirtual", SqlDbType.Bit); isVirtual.Direction = ParameterDirection.Input; isVirtual.Value = false; command.Parameters.Add(isVirtual);
SqlParameter errorText = new SqlParameter("@ErrorText", SqlDbType.NVarChar, 4000); errorText.Direction = ParameterDirection.Output; command.Parameters.Add(errorText);
SqlParameter result = new SqlParameter("@RETURN_VALUE", SqlDbType.Int); result.Direction = ParameterDirection.ReturnValue; command.Parameters.Add(result);
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows) { if (reader.FieldCount >= 3) { while (reader.Read()) { if (!(physicalNodeDictionary.ContainsKey((int)reader["PhysicalFolderID"]))) { DMSTreeNodeData folderNodeData = new DMSTreeNodeData((int)reader["PhysicalFolderID"], DMSType.PhysicalFolder);
TreeNode folderNode = new TreeNode();
folderNode.Text = reader["FolderName"].ToString(); folderNode.Tag = folderNodeData; folderNode.ImageIndex = 0; folderNode.SelectedImageIndex = 1; folderNode.ContextMenuStrip = this.FolderNodeContextMenu;
if (reader["ParentID"] != null && reader["ParentID"] != DBNull.Value && physicalNodeDictionary.ContainsKey((int)reader["ParentID"])) { physicalNodeDictionary[(int)reader["ParentID"]].Nodes.Add(folderNode); } else { parentNode.Nodes.Add(folderNode); } physicalNodeDictionary.Add((int)reader["PhysicalFolderID"], folderNode); }
if (reader["FileID"].ToString() != "") { DMSTreeNodeData fileNodeData = new DMSTreeNodeData((int)reader["FileID"], DMSType.PhysicalFile);
TreeNode fileNode = new TreeNode();
if (!String.IsNullOrEmpty(reader["AltFileName"].ToString())) fileNode.Text = reader["AltFileName"].ToString(); else fileNode.Text = reader["Name"].ToString(); fileNode.Tag = fileNodeData; fileNode.ImageIndex = 2; fileNode.SelectedImageIndex = 2; fileNode.ContextMenuStrip = this.fileContextMenu;
physicalNodeDictionary[(int)reader["PhysicalFolderID"]].Nodes.Add(fileNode); } } } }
reader.Close();
connection.Close();
} catch (Exception e) { String errorMsg = "Get Physical Nodes: " + e.ToString(); _log.Error(errorMsg); } }
Ich hoffe das hilft weiter, obwohl das sehr viel ist?!?! |