我需要擴展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