2010-07-08 246 views
1

我有一個使用Treeview的網頁。 在treeview中是節點,我使用文本和值屬性,但我需要一個。我需要一個名爲IsFile的布爾屬性。將屬性添加到TreeNode

我製作節點並以編程方式將它們添加到樹中。 我有一個叫做NavTreeNodes的類繼承了TreeNode類和廣告這個布爾。

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值。

回答

2

創建保存您的值和IsFile屬性的新類,並將其放入節點的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);   
     } 
    } 

不知道系列化該解決方案是最好的,但它解決了這個問題

+0

嗯,你會怎麼做到這一點? – eski 2010-07-08 15:21:25

+0

嘗試此操作時出現錯誤。它說node.value只能是字符串。 – eski 2010-07-09 10:25:18

+0

我正在使用此方法從樹視圖中選擇並檢查treenode是否爲文件。許多用戶正在使用這些頁面,他們必須登錄。當許多用戶使用它時,此方法是否很慢? – eski 2010-07-09 11:34:04

2

您可以使用屬性標籤和存儲額外的數據存在。

+0

System.Web.UI.WebControls.TreeNode中沒有Tag屬性 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.treenode_members.aspx 它被替換爲價值財產。 – 2010-07-08 14:44:10

+0

Yaubb,我不能使用標籤屬性,那只是在形式和WPF我認爲 – eski 2010-07-08 14:47:50

+0

好吧,你是對的。我正在談論winform treenode。 ) – yatagarasu 2010-07-08 14:49:09