首页 新闻 赞助 找找看

如何重写TreeNode多加几个属性?

0
悬赏园豆:60 [已关闭问题] 关闭于 2009-08-25 16:32

一个项目需要用到TreeView需要多个属性 ,我想把这些属性存放到treeNode中 我打算继承他来使用,但是发现不行

    public class FileNode:System.Web.UI.WebControls.TreeNode
    {

        private string _fatherId;

        public string FatherId
        {
            get { return _fatherId; }
            set { _fatherId = value; }
        }
        private string _orderId;

        public string OrderId
        {
            get { return _orderId; }
            set { _orderId = value; }
        }

 

        public FileNode():base()
        {

        }

        public FileNode(string text,string value,string father,string order):base(text,value)
        {
         
            this.FatherId = father;
            this.OrderId = order;
           
           
        }

 

 

        protected override object SaveViewState()
        {
            object[] arrState = new object[5];
            arrState[0] = base.SaveViewState();
            arrState[1]=this.Text;
            arrState[2] = this.Value;
            arrState[3] = this.FatherId;
            arrState[4] = this.OrderId;
            return arrState;
        }

        protected override void LoadViewState(object savedState)
        {
            if (savedState != null)
            {
                object[] arrState = savedState as object[];

                this.Text = (string)arrState[1];
                this.Value = (string)arrState[2];
                this.FatherId = (string)arrState[3];
                this.OrderId = (string)arrState[4];
                base.LoadViewState(arrState[0]);
            }
        }

 

 

    }

 

 

 

用的时候 string aaa = (TreeView1.Nodes[0] as FileNode).OrderId;

发现根本不行  

请问谁有办法啊  谢谢

搞IT的狐狸的主页 搞IT的狐狸 | 初学一级 | 园豆:0
提问于:2009-08-12 15:55
< >
分享
所有回答(5)
0

有什么错误提示?

无法转换?

二十二号同学 | 园豆:790 (小虾三级) | 2009-08-12 16:38
0

你这样写肯定暴(TreeView1.Nodes[0] as FileNode)为NullReferenceException。

因为TreeView1.Nodes[0]是TreeNode的实例,你根本没有创建FileNode实例。

父类TreeNode实例不能实例化为子类FileNode实例。

known | 园豆:163 (初学一级) | 2009-08-12 17:11
0

可能通过构造字符串的形式来实现的,如“属性1=值@属性2=值@属性3=值”,把这个值放在ID或者VALUE里就好了。

李.net | 园豆:730 (小虾三级) | 2009-08-12 17:42
0

你那样肯定是不行的,因为原对象的类型是TreeNode 而不是你指定的这个类型。

你可以把这些属性做成一个类然后赋值给 TreeNode.Tag ,然后从TreeNode.Tag中读取就可以了。

eaglet | 园豆:17139 (专家六级) | 2009-08-13 07:57
0

有一个缓解的办法:treenode重写是必要,用一个UserControl包装,添加一个TreeView的引用。

winzheng | 园豆:8797 (大侠五级) | 2009-08-13 09:39
请问如何做呢,我觉得从OOP为了 实现而设计 而不是 为了实现而实现的话..还是继承TREENODE比较好 请问如何实现呢, 毕竟给他其他属性 灵活的写几个参数不大"美观"
支持(0) 反对(0) 搞IT的狐狸 | 园豆:0 (初学一级) | 2009-08-13 16:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册