2010-09-22 72 views
6
ROOT 
     A 
     B 
      C 
      D 
       E 
     T 
     F 
     G 
     X 

Tôi muốn tìm các nút cha của nút E (đó là số 5). Sau đó, tôi sẽ lưu nút. Nếu số nhỏ hơn 5. Tôi đang sử dụng TreeView trong điều khiển Asp.net.cách tìm các nút con tại nút gốc [TreeView]

+0

@ Ozkan: số 4 gì? Bạn có muốn tìm chiều sâu không? –

+0

Cha/mẹ là 'D', phải không? –

+0

@Albin, vâng, tôi muốn tìm độ sâu một nút. – ozkank

Trả lời

7

Tôi khuyên bạn nên sử dụng lặp lại đệ quy.

private TreeNode FindNode(TreeView tvSelection, string matchText) 
{ 
    foreach (TreeNode node in tvSelection.Nodes) 
    { 
     if (node.Tag.ToString() == matchText) 
     { 
      return node; 
     } 
     else 
     { 
      TreeNode nodeChild = FindChildNode (node, matchText); 
      if (nodeChild != null) return nodeChild; 
     } 
    } 
    return (TreeNode)null; 
} 

Bạn có thể sử dụng logic này để xác định nhiều điều về nút và cấu trúc này cũng cho phép bạn mở rộng những gì bạn có thể làm với nút và tiêu chí bạn muốn tìm kiếm. Bạn có thể chỉnh sửa ví dụ của tôi để phù hợp với nhu cầu của riêng bạn. Vì vậy, với ví dụ này bạn có thể vượt qua trong E và mong đợi để có nút E trở lại sau đó chỉ đơn giản là nếu thuộc tính cha mẹ của nút được trả về sẽ là cha mẹ bạn sau.

tn treenode = FindNode(myTreeview, "E") 

tn.parent là giá trị bạn đang theo dõi.

1
private TreeNode GetNode(string key) 
    { 
     TreeNode n = null ; 
     n = GetNode(key, Tree.Nodes); 
     return n; 
    } 
    private TreeNode GetNode(string key,TreeNodeCollection nodes) 
    { 
     TreeNode n = null; 
     if (nodes.ContainsKey(key)) 
      n = nodes[key]; 
     else 
     { 
      foreach (TreeNode tn in nodes) 
      { 
       n = GetNode(key, tn.Nodes); 
       if (n != null) break; 
      } 
     } 

     return n; 
    } 
+1

Hãy thử và giải thích mã của bạn. –

1

Tôi tò mò, vì điều này được gắn thẻ dưới dạng WebForm, tại sao phương pháp FindNode của Microsoft không được đề xuất. Nó tương thích với v2.0 đến nay (hiện tại là v4.5.2).

Điều đó không hoạt động ở đây?

Từ MSDN của Microsoft:

Sử dụng phương pháp FindNode để có được một nút từ điều khiển TreeView tại đường dẫn giá trị quy định. Đường dẫn giá trị chứa một danh sách các giá trị nút được phân tách bằng dấu phân tách tạo thành một đường dẫn từ nút gốc đến nút hiện tại. Mỗi nút lưu trữ đường dẫn giá trị của nó trong thuộc tính ValuePath. Thuộc tính PathSeparator chỉ định ký tự dấu tách được sử dụng để phân tách các giá trị nút.

Ví dụ:

void Button_Click(Object sender, EventArgs e) 
{ 

    // Find the node specified by the user. 
    TreeNode node = LinksTreeView.FindNode(Server.HtmlEncode(ValuePathText.Text)); 

    if (node != null) 
    { 
    // Indicate that the node was found. 
    Message.Text = "The specified node (" + node.ValuePath + ") was found."; 
    } 
    else 
    { 
    // Indicate that the node is not in the TreeView control. 
    Message.Text = "The specified node (" + ValuePathText.Text + ") is not in this TreeView control."; 
    } 

} 
Các vấn đề liên quan