2010-07-08 6 views
1

나는 Treeview를 사용하는 웹 페이지가 있습니다. TreeView에서 노드 및 텍스트 및 값 속성을 사용하지만 하나 더 필요합니다. IsFile이라는 부울 속성이 하나 필요합니다.TreeNode에 속성 추가

나는 노드를 프로그래밍 방식으로 트리에 추가합니다. TreeNode 클래스를 상속 한 NavTreeNodes라는 클래스와이 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 값을 가져올 수도 없습니다.

답변

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

+0

시도 할 때 오류가 발생합니다. node.value는 문자열 일뿐입니다. – eski

+0

이 방법을 사용하여 트리 뷰에서 선택하고 트리 노트가 파일인지 아닌지 확인합니다. 많은 사용자가이 페이지를 사용하고 있으며 로그인해야합니다. 많은 사용자가이 방법을 사용하면 속도가 느립니까? – eski

2

당신은 속성 태그를 사용하고 거기에 추가 데이터를 저장할 수 있습니다를 해결합니다.

+0

System.Web.UI.WebControls.TreeNode 클래스에 Tag 속성이 없습니다. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.treenode_members.aspx Value 속성. –

+0

Yaubb, 나는 태그 속성을 사용할 수 없다. Forms와 WPF에서 thats를 사용한다. – eski

+0

괜찮 았어. 나는 한판 승부 winforms treenode 이야기했다.) – yatagarasu

관련 문제