2012-03-20 101 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