2012-01-11 54 views
0

工作我的網頁打開時運行此方法:C#asp.net樹視圖 - 所有的屬性,除了TEXT

private void PrintRecursive(TreeNode treeNode, string problemValue) 
    { 
     // Print the node. 
     System.Diagnostics.Debug.WriteLine(treeNode.Text); 

     if (treeNode.Value == problemValue.Split(':')[0]) 
     { 
      treeNode.Checked = true; 

      // Then expand the SelectedNode and ALL its parents until no parent found 

      treeNode.Expand(); 
      while (treeNode.Parent != null) 
      { 
       treeNode = treeNode.Parent; 
       treeNode.Expand(); 
      } 

      if (problemValue.Contains(":")) 
       treeNode.Text += problemValue.Split(':')[1]; 
      return; 
     } 
     // Print each node recursively. 
     foreach (TreeNode tn in treeNode.ChildNodes) 
     { 
      PrintRecursive(tn, problemValue); 
     } 
    } 

treeNode.Checked = true工作正常!

treeNode.Expand()工作很好!

然而treeNode.Text += problemValue.Split(':')[1];什麼都不做!

problemValue"111:someproblem"

我到底做錯了什麼?

+0

以及你在這裏錯誤地使用拆分方法..你在期待什麼結果是..? – MethodMan 2012-01-11 20:54:46

+0

@DJKRAZE這個方法怎麼了? – 2012-01-11 20:55:04

+0

分裂返回正常..但我想知道如果你應該已經將它返回到一個字符串[],然後檢查TreeNode.Value的值..你不應該硬編碼序數位置使用for循環或foreach或創建IEnumerable是否遵循 – MethodMan 2012-01-11 21:02:25

回答

1

你需要移動

 if (problemValue.Contains(":")) 
      treeNode.Text += problemValue.Split(':')[1]; 

while語句以上。

問題是,當您擴展父項時,您正在更新treeNode的值,因此當您嘗試設置treeNode的文本時,您實際上位於其中一個父節點。

+0

但我需要它是+ =不= = – 2012-01-11 20:55:52

+0

好吧,我看到問題的真正原因。答案已更新。 – 2012-01-11 20:57:17

+0

我該怎麼做? – 2012-01-11 20:58:32

1

如果你想看看如何做到這一點看看這個先前StackOverflow的發佈,以及就如何枚舉樹節點Implementing IEnumerable

,如果你想打印的TreeNode遞歸看看下面這個例子更多的想法

private void PrintRecursive(TreeNode treeNode) 
{ 
    // Print the node. 
    System.Diagnostics.Debug.WriteLine(treeNode.Text); 
    MessageBox.Show(treeNode.Text); 
    // Print each node recursively. 
    foreach (TreeNode tn in treeNode.Nodes) 
    { 
     PrintRecursive(tn); 
    } 
} 

// Call the procedure using the TreeView. 
private void CallRecursive(TreeView treeView) 
{ 
    // Print each node recursively. 
    TreeNodeCollection nodes = treeView.Nodes; 
    foreach (TreeNode n in nodes) 
    { 
     PrintRecursive(n); 
    } 
} 

如果你想這樣做,因爲IEmumerable試試下面

public static class Extensions 
{ 
    public static IEnumerable<T> GetRecursively<T>(this IEnumerable collection, 
     Func<T, IEnumerable> selector) 
    { 
     foreach (var item in collection.OfType<T>()) 
     { 
      yield return item; 

      IEnumerable<T> children = selector(item).GetRecursively(selector); 
      foreach (var child in children) 
      { 
       yield return child; 
      } 
     } 
    } 
} 

以下下面是一個例子如何使用它

TreeView view = new TreeView(); 

// ... 

IEnumerable<TreeNode> nodes = view.Nodes. 
    .GetRecursively<TreeNode>(item => item.Nodes); 
+0

這正是我期望看到的;但.Text完全不受影響 – 2012-01-11 20:59:50

+0

非常感謝。下面的人回答了我的問題。但我會明確地使用你的IENUMERABLE代碼,再次感謝你的時間和幫助!!!!!!!! – 2012-01-11 21:13:01

+0

真棒..有時很難說如果OP的答案已經完成,沒有看到任何UPVotes ..祝你好運 – MethodMan 2012-01-11 21:14:19