一个项目需要用到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;
发现根本不行
请问谁有办法啊 谢谢
有什么错误提示?
无法转换?
你这样写肯定暴(TreeView1.Nodes[0] as FileNode)为NullReferenceException。
因为TreeView1.Nodes[0]是TreeNode的实例,你根本没有创建FileNode实例。
父类TreeNode实例不能实例化为子类FileNode实例。
可能通过构造字符串的形式来实现的,如“属性1=值@属性2=值@属性3=值”,把这个值放在ID或者VALUE里就好了。
你那样肯定是不行的,因为原对象的类型是TreeNode 而不是你指定的这个类型。
你可以把这些属性做成一个类然后赋值给 TreeNode.Tag ,然后从TreeNode.Tag中读取就可以了。
有一个缓解的办法:treenode重写是必要,用一个UserControl包装,添加一个TreeView的引用。