2012-03-20 102 views
0

我的頁面上有一個ASP.NET treeview。在我隱藏我有以下方法:ASP.NET Treeview控件總是將節點附加到CheckedNodes列表中

public string GetSelectedTreeValues(TreeView tv) 
    { 
     string taxVal = string.Empty; 

     StringBuilder textBuilder = new StringBuilder(); 
     string lists = string.Empty; 
     string cleanedlists = string.Empty; 

     try 
     { 
      TreeNodeCollection checkedNodes = tv.CheckedNodes; 
      foreach (TreeNode tn in checkedNodes) 
      { 
       lists = textBuilder.Append(tn.ValuePath + ",").ToString(); 
      } 

      // removing any trailing commas 
      cleanedlists = lists.Substring(0, lists.Trim().Length - 1); 
     } 
     catch (Exception ex) 
     { 
      new ApplicationException("Error: Getting Tree Nodes", ex); 
     } 
     return cleanedlists; 
    } 

問題是,當我做了回發,如果我改變我選擇的價值,他們總是追加到值列表。我認爲值的列表應該清除,然後重置爲新的值。

我已經瀏覽了代碼,發現CheckedNodes屬性始終將我檢查的節點追加到列表中,而不刪除未經檢查的節點。

回答

0

你可以發佈樹視圖綁定的代碼部分嗎?

在頁面生命週期中的哪個點綁定並調用GetSelectedTreeValues?

如果可以的話,你應該

 cleanedlists = string.Join(",", tv.CheckedNodes.Cast<TreeNode>().Select(tn => tn.ValuePath).ToArray()); 
+0

謝謝,JBL更換try塊內容!你的解決方案工作 - 現在我可以使用valuepaths設置跨回發檢查節點! :D(這是我需要完成的) – Tim 2012-03-20 17:48:05

+0

我說得太快了......看起來我*仍然*結束了添加到CheckedNodes集合的樹視圖,無論我做什麼。這使我瘋狂 - 爲什麼當我取消選中框時值不會更新? – Tim 2012-03-20 19:28:37

+0

@Tim:問題似乎不在代碼的這一部分。你能否將其他部分相對於你的treeview發佈? – jbl 2012-03-21 08:09:42