我有一个使用Treeview的网页。 在树视图中是节点,我使用Text和Value属性,但我还需要一个。我需要一个名为IsFile的布尔属性。
我创建节点并以编程方式将它们添加到树中。 我有一个名为NavTreeNodes的类,它继承了TreeNode类并广告这个bool。
public class NavTreeNode : TreeNode
{
private bool _IsFile;
public bool IsFile
{
get { return _IsFile; }
set { _IsFile = value; }
}
public NavTreeNode()
{ }
}
当我创建一个新的TreeNode时,我使用这个类。 一切正常,直到我尝试从TreeView函数的SelectedNodeChanged中的树视图中获取数据。
protected void treeview_Navigation_SelectedNodeChanged(object sender, EventArgs e)
{
TreeNode node = treeview_Navigation.SelectedNode;
NavTreeNode NNode = node as NavTreeNode;
Response.Write(NNode.IsFile.ToString());
}
我得到一个“对象引用未设置为对象的实例”。我尝试这个时出错。 我甚至无法使用此方法获取Value或Text值。
答案 0 :(得分:2)
创建保存您的值和IsFile属性的新类,并将其放在node的Value属性中。
[Serializable]
public class ValueAndIsFile {
[XmlAttribute]
public bool IsFile {get; set;}
[XmlAttribute]
public string Value { get; set; }
}
...
TreeNode nd = new TreeNode ();
ValueAndIsFile val = new ValueAndIsFile(){ IsFile = true, Value = yourValueObject};
nd.Value =SerializeToString(val);
treeView.Nodes.Add(nd);
....
protected void treeview_Navigation_SelectedNodeChanged(object sender, EventArgs e)
{
TreeNode node = treeview_Navigation.SelectedNode;
ValueAndIsFile val = DeserializeFromString<ValueAndIsFile>(node.Value);
Response.Write(val.IsFile.ToString());
}
public static string SerializeToString(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
public static T DeserializeFromString<T>(string str)
{
XmlSerializer serializer = new XmlSerializer(typeof(T) );
using (StringReader reader =new StringReader(str) )
{
return (T)serializer.Deserialize(reader);
}
}
不确定序列化的解决方案是否最佳,但它解决了问题
答案 1 :(得分:2)
您可以使用属性Tag并在那里存储其他数据。