Tag: treeview

TreeView不显示存储在数据中的子节点

在我的程序中,我有一个带有数据支持的TreeView (查看模型和数据模型)。 添加到TreeView每个项目都会添加一个子项目,但由于某种原因,子项在运行时没有反映。 但是,我能够在调试期间看到子项, TreeView’s数据模型中的“Children”属性在其setter中包含NotifyPropertyChange 。 注意:之前我遇到了类似的问题,即新添加的节点(这些子节点的父节点)也不会显示。 通过在树的xaml中设置DisplayMemberPath=”DisplayName.Value”来解决此问题。 TreeView’s xaml: TreeView ItemsSource=”{Binding UserControl_DataModel.TreeViewViewModel.ObservableCollection}” DisplayMemberPath=”DisplayName.Value”…/> 这是创建新节点并将其添加到TreeView (TreeViewViewModel)的位置: private TreeViewDataModel createNewNode(StringItem nodeName) { var newNode = new TreeViewDataModel () { DisplayName = nodeName }; newNode.Children.Add(new TreeViewDataModel () { DisplayName = nodeName}); return newNode; } public void addNewLocNode(StringItem nodeName) { TreeObservableCollection.Add(createNewNode(nodeName)); } 注意: StringItem是一个自定义类。 在StringItem , Value返回项的字符串值。 (例如: […]

检查TreeView中已检查节点的数量

我是新手使用树视图,我希望能够确保树视图只能检查一个子节点,如果有人试图检查多一个,它会停止检查事件并取消选择所有父节点和子节点。 我该怎么做呢? 到目前为止,这是我所拥有的,但它表现得很古怪。 有什么建议? 更新:为了澄清一些事情,这是一个win form treeview,父节点是一个类别,每个类别可以包含多个项目。 我只希望用户能够一次从类别中选择一个类别和一个项目。 private void tvRecipes_BeforeCheck(object sender, TreeViewCancelEventArgs e) { int checkedNodeCount = 0; if (e.Node.Parent != null && !e.Node.Parent.Checked) e.Cancel = true; else { foreach (TreeNode node in tvRecipes.Nodes) { if (node.Checked) ++checkedNodeCount; if (checkedNodeCount > 2) { MessageBox.Show(“Only one recipe can be selected at a time, please deselect […]

Context Menu触发器未在TreeViewItem上触发

在我的WPF应用程序中,我向TreeViewItems添加了一个TreeView控件绑定类数据。 我在treeviewitems中添加了一个上下文菜单。 contextMenu的处理程序没有触发。 这是TreeView的XAML代码。 这些是绑定到TreeView的两个类。 /// /// Class to hold the Pads info for a tree /// public class Pad { /// /// Default Constructor /// public Pad() { this.Members = new ObservableCollection(); } /// /// Name of the pad /// public string Name { get; set; } /// /// Members of the pad /// […]

当您尝试按关键字访问winforms TreeView并且不存在关键字时会发生什么?

我正在编写一个应用程序,我用数据库的模式填写TreeView。 我通过迭代每个表名并在GetSchema中键入来实现。 然后,根据DataType和名称,我选择要添加新项目的父节点。 有时该项目在treenode中不存在(取决于用户设置,某些表可能已添加或未添加为树视图的节点),这很好,在这种情况下我想要: A)抛出exception所以我知道它找不到要求的节点。 或者B)为失败的访问者返回null。 我的代码的(经过高度修改的)片段: TreeNode parent = null; if( tableName.StartsWith(“prefix”) ) { parent = tablesNode.Nodes[“Node Name which might not exist”]; } if (parent == null && IgnorePrefixedTables) { continue; } else if (parent == null) { throw Exception(); } ……. 问题是,当我到达不存在的节点名称的tablesNode.Nodes [“可能不存在的节点名称”]时,当我单步执行此代码(或者更确切地说是真实代码)时,我无法捕获exception,因为没有抛出。 如果我进入或超过该行代码,整个方法将我返回到最高级别(我的表单立即显示,UI部分完成)。 那是怎么回事? [编辑] 这是我的问题的非常简化的版本: namespace TestZone { public partial class […]

在C#中查找和替换树节点

我的C#代码中有一个树视图。 我希望在单击按钮时用我的整个树视图中的不同文本替换树节点的所有现有出现。 例如,我有3个节点出现,其中’Text’为“Manual”。 我想用文本“自动”替换所有这3个节点。 问题是这3个节点在树视图中位于3个不同的分支下。 它们不共享相同的父节点。 我打算通过编写for循环来自动编写这个过程,但我不知道如何首先找到所需的3个节点。

如何从TreeView中的节点的所有父节点获取文本?

也许我不能很好地解释,但这应该解释:我有一个名为getParentNode(TreeNode)的int字段来获取它有多少父节点(例如,如果节点下面有2个节点,count将是2)并且我有一个List名为getParentNames(TreeNode)的字段,它返回所有父名称。 getParentCount: int getParentCount(TreeNode node) { int count = 1; while (node.Parent != null) { count++; node = node.Parent; } return count; } getParentsNames: List getParentNames(TreeNode node) { List list = new List(); for (int i = 0; i < getParentCount(node); i++) { //i = 1 : list.Add(node.Parent.Text); //i = 2 : list.Add(node.Parent.Parent.Text); //i = […]

如何将特定的,反序列化的XML类结构绑定到Treeview

我想制作应用程序,将我的xml文件中的数据反序列化为类结构。 我通过’粘贴XML作为类’工具准备了类,但是所有内容都是在公共字段或表上进行的,当我尝试为List或ObservableCollections进行更改时,serializator正确地停止加载xml文档。 我接下来要做的是从树视图中选择一些元素,编辑它,然后再次保存到xml文件。 我不想直接在.xml上这样做。 这是我的XML示例: Autorzy: 222 Rust Snow 111 Ian Nower … 以下是类的例子 /// [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] [System.Xml.Serialization.XmlRootAttribute(Namespace = “”, IsNullable = false)] public partial class plan { private planNagłówek nagłówekField; private planGłówny głównyField; /// public planNagłówek nagłówek { get { return this.nagłówekField; } set { this.nagłówekField = value; } } /// public planGłówny […]

如何填充treeview?

我有一个表“类别”。它只是一个用户表,其中每个用一个唯一的UserId标识并具有相应的ParentId(指向他们的老板’UserId)。 如果它是顶级用户,则ParentId设置为0.有人可以帮我找出在树视图中填充此列表的最佳方法吗?

如何使用Asp.net动态添加树视图中的根节点

我想将DataTable绑定到TreeView.I已编写以下Code.Its目前工作,意味着它显示DataTable但没有根节点的所有数据。 List lstData = GetSPDocuments(); gvDocuments.DataSource = lstData; gvDocuments.DataBind(); DataTable dt = ConvertToDataTable(lstData); TreeNode node1 = new TreeNode(“Root”); foreach (DataRow r in dt.Rows) { int nodeLvl = int.Parse(r[“ID”].ToString()); string nodeParent = “Folders”; string nodeName = r[“Title”].ToString(); TreeNode tNode = new TreeNode(nodeName); ht.Add(nodeLvl.ToString() + nodeName, tNode); if (tvDocs.Nodes.Count == 0) tvDocs.Nodes.Add(tNode); else { nodeLvl–; tvDocs.Nodes.Add(tNode); } […]

如何根据它的标题选择一个TabItem

在我的程序中,我有一个tabItem ,当选择具有等效header的TreeViewItem时,它会被选中。 这就是我现在拥有的(它有效): (parent_TreeViewItem.Items.Contains(SelectedItem)) { tabControl1.SelectedItem = tabControl1.Items //Changes tab according to TreeView .OfType().SingleOrDefault(n => n.Header.ToString() == SelectedItem.Header.ToString()); } 与我这次正在做的事情的不同之tabItem在于我选择的tabItem的header由一个string和一个integer 。 例如:选中的TreeViewItem将始终具有名为”Arrival”的header ,但tabItem的header将具有”Arrival” + integer 。 integer数值将来自父节点的header 。 对于这个过程,我认为我首先需要获取父节点的header值,因为它包含我需要的integer数值。 然后我需要修改上面的代码以查询具有header的节点,如”Arrival” + parentHeader 。 我该怎么办? 谢谢。 UPDATE 我目前的代码,使用@ varocarbas的答案。 我正在使用答案的第一个版本,涉及将integer curNumber设置为父header的值。 单击“到达”节点时,代码将编译但不执行任何操作。 if (parent_TreeViewItem.Items.Contains(SelectedItem.Parent)) //Location – Actions tabs { TreeViewItem parentItem = (TreeViewItem)SelectedItem.Parent; int curNumber = […]