3

我想TreeView动态地将对象数据存储到节点(在应用程序运行时)。在 Windows 窗体中,我使用

node.tag = ? 

没关系。我试试

node.DataItem = something 

但它是只读的。那么如何将对象数据存储在 ASP.NET TreeView 节点中呢?

4

2 回答 2

2

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;
        }
    }
}
于 2013-05-09T14:06:09.823 回答
0

ASP.NET TreeNode 控件就是您现在正在使用的控件(与 WinForms 不同)。有两个相关的属性适合您:

TreeNode.Text- 树上实际显示的内容。
TreeNode.Value- 该节点的基础价值。

DataItem除非您将数据源绑定到 TreeView(听起来不像您正在做的那样),否则您不想弄乱该属性(正如您所发现的那样)。即便如此,那也只是为了获得价值;你不能那样存储任何东西。

于 2013-05-09T13:58:39.403 回答