/// <summary> /// 依据要添加节点的种类和节点文本,生成其路径,可用于检测是否己存在同名节点 /// </summary> /// <param name="category"></param> /// <param name="newNodeText"></param> /// <returns></returns> public String getNewNodePath(AddNodeCategory category, String newNodeText) { String selectNodePath = (curDbInfoTab.CurrentTreeView.SelectedItem as TreeViewIconsItem) == null ? "" : (curDbInfoTab.CurrentTreeView.SelectedItem as TreeViewIconsItem).Path; String newNodePath = ""; switch (category) { case AddNodeCategory.AddRoot: newNodePath = "/" + newNodeText + "/"; break; case AddNodeCategory.AddChild: if (selectNodePath != "") { newNodePath = selectNodePath + newNodeText + "/"; } break; case AddNodeCategory.AddSibling: if (selectNodePath != "") { String selectNodeText = (curDbInfoTab.CurrentTreeView.SelectedItem as TreeViewIconsItem).HeaderText; newNodePath = selectNodePath.Replace("/" + selectNodeText + "/", "/" + newNodeText + "/"); } break; } return(newNodePath); }
private void AddNode(AddNodeCategory category) { string treeNodeType = labeltree.TreeNodeType; //为新节点生成默认文本 String NodeText = MainWin.getDefaultNodeText(treeNodeType) + (labeltree.NodeCount + 1); //尝试从剪贴板中提取文本 String textFromClipboard = StringUtils.getFirstLineOfString(Clipboard.GetText()); if (String.IsNullOrEmpty(textFromClipboard) == false && textFromClipboard != LastPasteNodeText && textFromClipboard.IndexOf("/") == -1) { //检测一下从剪贴板中获取的文本是否有效(即不会导致重名的节点出现) String newNodeText = textFromClipboard; bool nodeExisted = labeltree.IsNodeExisted(MainWin.getNewNodePath(category, newNodeText)); //如果不存在同名的路径 if (nodeExisted == false) { NodeText = newNodeText; LastPasteNodeText = NodeText; } } //如果还有重复路径的,则循环使用随机数,务必保证路径不会相同 while (labeltree.IsNodeExisted(MainWin.getNewNodePath(category, NodeText))) { NodeText = MainWin.getDefaultNodeText(treeNodeType) + new Random().Next() as string; } //创建默认的节点数据对象 NodeDataObject dataobject = NodeFactory.CreateDataInfoNode(treeNodeType, DALConfig.getEFConnectionString(curDbInfoTab.dbInfoObject.DatabaseFilePath)); TreeViewIconsItem newNode = null; //在树中添加节点 switch (category) { case AddNodeCategory.AddRoot: newNode = labeltree.AddRoot(NodeText, dataobject); curDbInfoTab.LabelViewObj.SuperTree.AddRoot(NodeText, dataobject); break; case AddNodeCategory.AddChild: newNode = labeltree.AddChild(NodeText, dataobject); curDbInfoTab.LabelViewObj.SuperTree.AddChild(NodeText, dataobject); break; case AddNodeCategory.AddSibling: newNode = labeltree.AddSibling(NodeText, dataobject); curDbInfoTab.LabelViewObj.SuperTree.AddSibling(NodeText, dataobject); break; default: break; } if (newNode == null) { return; } //新节点,默认不是粗体的 newNode.FontWeight = FontWeights.Normal; //在数据库中创建记录 if (dataobject.AccessObject != null) { dataobject.AccessObject.Create(dataobject.DataItem); } //保存树结构 curDbInfoTab.SaveTreeToDB(labeltree); //自动进入编辑状态 newNode.BeginEdit(); }
/// <summary> /// 依据要添加节点的种类和节点文本,生成其路径,可用于检测是否己存在同名节点 /// </summary> /// <param name="category"></param> /// <param name="newNodeText"></param> /// <returns></returns> private String getNewNodePath(AddNodeCategory category, String newNodeText) { String selectNodePath = (curDbInfoTab.treeView1.SelectedItem as TreeViewIconsItem) == null ? "" : (curDbInfoTab.treeView1.SelectedItem as TreeViewIconsItem).Path; String newNodePath = ""; switch (category) { case AddNodeCategory.AddRoot: newNodePath = "/" + newNodeText + "/"; break; case AddNodeCategory.AddChild: if (selectNodePath != "") { newNodePath = selectNodePath + newNodeText + "/"; } break; case AddNodeCategory.AddSibling: if (selectNodePath != "") { String selectNodeText = (curDbInfoTab.treeView1.SelectedItem as TreeViewIconsItem).HeaderText; newNodePath = selectNodePath.Replace("/" + selectNodeText + "/", "/" + newNodeText + "/"); } break; } return newNodePath; }
/// <summary> /// 添加节点 /// </summary> /// <param name="category">指要新建儿子、兄弟还是根节点</param> /// <param name="nodeType">指节点的类型是:DetailText\OnlyText等 </param> private void AddNode(AddNodeCategory category, String nodeType) { //为新节点生成默认文本 String NodeText = getDefaultNodeText(nodeType) + (curDbInfoTab.treeView1.NodeCount + 1); //尝试从剪贴板中提取文本 String textFromClipboard = StringUtils.getFirstLineOfString(Clipboard.GetText()); if (String.IsNullOrEmpty(textFromClipboard) == false && textFromClipboard != LastPasteNodeText && textFromClipboard.IndexOf("/") == -1) { //检测一下从剪贴板中获取的文本是否有效(即不会导致重名的节点出现) String newNodeText = textFromClipboard; bool nodeExisted = curDbInfoTab.treeView1.IsNodeExisted(getNewNodePath(category, newNodeText)); //如果不存在同名的路径 if (nodeExisted == false) { NodeText = newNodeText; LastPasteNodeText = NodeText; } } //如果还有重复路径的,则循环使用随机数,务必保证路径不会相同 while (curDbInfoTab.treeView1.IsNodeExisted(getNewNodePath(category, NodeText))) { NodeText = getDefaultNodeText(nodeType) + new Random().Next(); } //创建默认的节点数据对象 NodeDataObject dataobject = NodeFactory.CreateDataInfoNode(nodeType, DALConfig.getEFConnectionString(curDbInfoTab.dbInfoObject.DatabaseFilePath)); TreeViewIconsItem newNode = null; //在树中添加节点 switch (category) { case AddNodeCategory.AddRoot: newNode = curDbInfoTab.treeView1.AddRoot(NodeText, dataobject); break; case AddNodeCategory.AddChild: newNode = curDbInfoTab.treeView1.AddChild(NodeText, dataobject); break; case AddNodeCategory.AddSibling: newNode = curDbInfoTab.treeView1.AddSibling(NodeText, dataobject); break; default: break; } if (newNode == null) { return; } //新节点,默认不是粗体的 newNode.FontWeight = FontWeights.Normal; //在数据库中创建记录 if (dataobject.AccessObject != null) { dataobject.AccessObject.Create(dataobject.DataItem); } //保存树结构 curDbInfoTab.SaveTreeToDB(); //自动进入编辑状态 newNode.BeginEdit(); }
/// <summary> /// 添加节点 /// 成功返回新节点,不成功,返回null /// 新节点自动展开且选中 /// </summary> /// <param name="parent"></param> /// <param name="nodeText"></param> /// <param name="nodeIcon"></param> /// <returns></returns> private TreeViewIconsItem addNode(AddNodeCategory addType, TreeViewIconsItem selectedNode, String nodeText, NodeDataObject nodeDataObject) { if (selectedNode != null) { selectedNode.IsExpanded = true; } ShouldRaiseSelectedItemChangedEvent = true; TreeViewIconsItem treeNode = new TreeViewIconsItem(this, nodeDataObject); treeNode.HeaderText = nodeText; treeNode.Icon = nodeDataObject.DataItem.NormalIcon; //自动展开 treeNode.IsExpanded = true; switch (addType) { case AddNodeCategory.AddRoot: treeNode.Path = "/" + nodeText + "/"; nodeDataObject.DataItem.Path = treeNode.Path; tree.Items.Add(treeNode); nodesManager.nodes.Add(treeNode); break; case AddNodeCategory.AddChild: if (selectedNode != null) { treeNode.Path = selectedNode.Path + nodeText + "/"; nodeDataObject.DataItem.Path = treeNode.Path; selectedNode.Items.Add(treeNode); nodesManager.nodes.Add(treeNode); } else { return(null); } break; case AddNodeCategory.AddSibling: if (selectedNode != null && selectedNode.Parent != null) { //如果选中节点是顶层节点 if (selectedNode.Parent == tree) { treeNode.Path = "/" + nodeText + "/"; nodeDataObject.DataItem.Path = treeNode.Path; tree.Items.Add(treeNode); } else { //不是顶层节点 TreeViewIconsItem parent = selectedNode.Parent as TreeViewIconsItem; treeNode.Path = parent.Path + nodeText + "/"; nodeDataObject.DataItem.Path = treeNode.Path; parent.Items.Add(treeNode); } nodesManager.nodes.Add(treeNode); } else //当前没有选中节点或选中节点没有父亲 { return(null); } break; default: break; } if (_autoSelectNewNode) { treeNode.IsSelected = true; } //更新树的存储 String treeXml = saveToXmlString(); if (_repository != null) { _repository.SaveTree(treeXml); } return(treeNode); }
/// <summary> /// 添加节点 /// 成功返回新节点,不成功,返回null /// 新节点自动展开且选中 /// </summary> /// <param name="parent"></param> /// <param name="nodeText"></param> /// <param name="nodeIcon"></param> /// <returns></returns> private TreeViewIconsItem addNode(AddNodeCategory addType, TreeViewIconsItem selectedNode, String nodeText, NodeDataObject nodeDataObject) { if (selectedNode != null) { selectedNode.IsExpanded = true; } TreeViewIconsItem treeNode = new TreeViewIconsItem(this, nodeDataObject); treeNode.HeaderText = nodeText; treeNode.Icon = nodeDataObject.DataItem.NormalIcon; //自动展开 treeNode.IsExpanded = true; switch (addType) { case AddNodeCategory.AddRoot: treeNode.Path = "/" + nodeText + "/"; nodeDataObject.DataItem.Path = treeNode.Path; tree.Items.Add(treeNode); nodesManager.nodes.Add(treeNode); break; case AddNodeCategory.AddChild: if (selectedNode != null) { treeNode.Path = selectedNode.Path + nodeText + "/"; nodeDataObject.DataItem.Path = treeNode.Path; selectedNode.Items.Add(treeNode); nodesManager.nodes.Add(treeNode); } else { return null; } break; case AddNodeCategory.AddSibling: if (selectedNode != null && selectedNode.Parent != null) { //如果选中节点是顶层节点 if (selectedNode.Parent == tree) { treeNode.Path = "/" + nodeText + "/"; nodeDataObject.DataItem.Path = treeNode.Path; tree.Items.Add(treeNode); } else { //不是顶层节点 TreeViewIconsItem parent = selectedNode.Parent as TreeViewIconsItem; treeNode.Path = parent.Path + nodeText + "/"; nodeDataObject.DataItem.Path = treeNode.Path; parent.Items.Add(treeNode); } nodesManager.nodes.Add(treeNode); } else //当前没有选中节点或选中节点没有父亲 { return null; } break; default: break; } if (_autoSelectNewNode) { treeNode.IsSelected = true; } //更新树的存储 String treeXml = saveToXmlString(); MainTreeRepository.SaveTree(treeXml); return treeNode; }