各ノードにカスタムプロパティを追加できるように、TreeNodeクラスを拡張する必要があります(WebForms TreeNodeにはTagプロパティが含まれていません)。カスタムTreeView/TreeNodeを作成する
CustomTreeNode selectedNode = (CustomTreeNode)TreeView.SelectedNode;
:
CustomTreeNode node = new CustomTreeNode(1, "CustomType");
treeView.Nodes.Add(node);
私は、次やっキャスト例外になるだろう:私はCustomTreeNodeを作成して、ツリービューに追加した場合
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はTreeNodeを返し、CustomTreeNodeは返さないためです。
私はいくつかの読書をして、TreeViewクラスを拡張し、TreeNodeではなくCustomTreeNodeを返すためにCreateNode()メソッドをオーバーライドする必要があるようです。
public class CustomTreeView : TreeView
{
protected override TreeNode CreateNode()
{
return new CustomTreeNode();
}
}
問題は、しかし、CreateNode()あなたはCustomTreeNodeクラスの空のコンストラクタを呼び出す持っている必要がありますので、任意の引数を取らないです。だから私は、これを作成しました。したがって、上記のCustomTreeNodeを作成したときに、CustomTreeViewから取得すると、空のコンストラクタが値を持たないノードを返すため、nodeIdとnodeTypeの値が失われました。
ご迷惑をおかけして申し訳ございません。
ありがとうございます。それは非常に有益で、知っておくと便利です。それは完璧に働いた。 – pedroAx
@Tungこれは素晴らしい投稿です。同時に、私はこのリンクを読んでいました:http://support.microsoft.com/kb/2527108あなたのソリューションを実装しましたが、このエラーが発生しました: 'エラー6 'System.Web.UI.WebControls'という名前空間に型または名前空間の名前 'CustomTreeView'が存在しません。私はaspxコードで何かを追加する必要がありますか? – Ninita
@Ninita実際にはこの例のバグです。タグ接頭辞は、Page Directiveで登録するものです。あなたのコントロールが名前空間 'Bar'内の' Foo'というアセンブリで定義されている場合、 'Register'ディレクティブで' Assembly = "Foo"と 'Namespace =" Bar "を設定します。私は例を更新しました – Tung