Мне нужно расширить класс 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
@ Это отличная статья. В то же время я прочитал это, я читал эту ссылку: http://support.microsoft.com/kb/2527108. Я внедрил ваше решение, но получил эту ошибку: «Ошибка 6 Тип или имя пространства имен« CustomTreeView »не существует в пространстве имен« System.Web.UI.WebControls ». Мне нужно добавить что-то в код aspx? – Ninita
@Ninita Это на самом деле ошибка в примере. Префикс тега должен быть тем, который вы регистрируете в соответствии с Директивой по страницам. Если ваш элемент управления определен в сборке под названием 'Foo' в пространстве имен' Bar', вы должны установить 'Assembly =" Foo "и' Namespace = "Bar" 'в директиве' Register'.Я обновил пример – Tung