我需要扩展TreeNode类,以便可以将自定义属性添加到每个节点(请参阅WebForms TreeNode不包含Tag属性)。所以这是我CustomTreeNode:创建自定义TreeView/TreeNode
public class CustomTreeNode : TreeNode
{
public CustomTreeNode()
{
}
public CustomTreeNode(int nodeId, string nodeType)
{
NodeId = nodeId;
NodeType = nodeType;
}
public string NodeType { get; set; }
public int NodeId { get; set; }
}
如果我创建一个CustomTreeNode并将其添加到一个TreeView:
CustomTreeNode node = new CustomTreeNode(1, "CustomType");
treeView.Nodes.Add(node);
然后,我会得到一个铸造例外执行下列操作:
CustomTreeNode selectedNode = (CustomTreeNode)TreeView.SelectedNode;
因为TreeView返回一个TreeNode,而不是一个CustomTreeNode。
我已经做了一些阅读,看起来我需要扩展TreeView类,并重写CreateNode()方法以返回CustomTreeNode而不是TreeNode。所以我创造了这个:
public class CustomTreeView : TreeView
{
protected override TreeNode CreateNode()
{
return new CustomTreeNode();
}
}
的问题然而,CreateNode()不带任何参数,所以你必须有呼吁CustomTreeNode类空构造。所以,当我创建上面的CustomTreeNode时,当我从CustomTreeView中获取它时,nodeId和nodeType值已丢失,因为空构造函数返回没有任何值的节点。
任何帮助非常感谢。
谢谢。这是非常有用和有用的知道。它工作完美。 – pedroAx 2012-04-26 09:35:49
@Tung这是一篇很棒的文章。同时我阅读了这篇文章,我正在阅读这个链接:http://support.microsoft.com/kb/2527108。我实现了你的解决方案,但是我得到了这个错误:'错误6名称空间'System.Web.UI.WebControls'中不存在类型或命名空间名'CustomTreeView'。我需要在aspx代码中添加一些东西? – Ninita 2014-07-31 09:19:57
@Ninita这实际上是一个例子中的错误。标签前缀应该是通过页面指令注册的。如果你的控件是在名为'Bar'的名为'Foo'的程序集中定义的,那么你可以在'Register'指令中设置'Assembly =“Foo”'和'Namespace =“Bar”'。我更新了这个例子 – Tung 2014-08-01 00:01:35