我想TreeView
动态地将对象数据存储到节点(在应用程序运行时)。在 Windows 窗体中,我使用
node.tag = ?
没关系。我试试
node.DataItem = something
但它是只读的。那么如何将对象数据存储在 ASP.NET TreeView 节点中呢?
ASP.NET TreeNode 中没有 Tag 属性,但您可以使用 Tag 属性实现自己的树节点
如何扩展 ASP.NET TreeView 控件的内置 TreeNode 类
using System.Web.UI.WebControls;
namespace CSASPNETInheritingFromTreeNode
{
public class CustomTreeView : TreeView
{
protected override TreeNode CreateNode()
{
return new CustomTreeNode(this, false);
}
}
public class CustomTreeNode : TreeNode
{
public object Tag { get; set; }
public CustomTreeNode() : base()
{
}
public CustomTreeNode(TreeView owner, bool isRoot) : base(owner, isRoot)
{
}
protected override void LoadViewState(object state)
{
object[] arrState = state as object[];
this.Tag = arrState[0];
base.LoadViewState(arrState[1]);
}
protected override object SaveViewState()
{
object[] arrState = new object[2];
arrState[1] = base.SaveViewState();
arrState[0] = this.Tag;
return arrState;
}
}
}
ASP.NET TreeNode 控件就是您现在正在使用的控件(与 WinForms 不同)。有两个相关的属性适合您:
TreeNode.Text
- 树上实际显示的内容。
TreeNode.Value
- 该节点的基础价值。
DataItem
除非您将数据源绑定到 TreeView(听起来不像您正在做的那样),否则您不想弄乱该属性(正如您所发现的那样)。即便如此,那也只是为了获得价值;你不能那样存储任何东西。