我的TreeView绑定的是XML数据源,显示时都正确连级选择也没有错,但是获取TreeView中的id项或者title项时就有错了
这是我的Xml数据源
<?xml version="1.0" encoding="utf-8" standalone ="yes"?>
<NewDataSit id="all"  title="全选">
  <tree id="01" title="拆迁及征地费用">
    <Option id="0101"  title="拆迁及征地费用"/>
  </tree>
  <tree id="02" title="路基">
    <Option id="0202" title="区间路基土石方"/>
    <Option id="0203" title="站场土石方"/>
    <Option id="0204" title="路基附属工程"/>
  </tree>
  <tree id="03" title="桥涵">
    <Option id="0305" title="特大桥"/>
    <Option id="0306" title="大桥"/>
    <Option id="0307" title="中桥"/>
    <Option id="0308" title=""/>
    <Option id="0309" title="涵洞"/>
  </tree>
</NewDataSit>怎样连级选择的js部分就不写了,后台是这样的 protected void OnCheckChanged(object sender, TreeNodeEventArgs e)
    {
        int i = 0;
        string[] chapterID = new string[100];
        if (TreeView1.CheckedNodes.Count > 0)
        {            WhatsChecked.Text = "您选择导入的章节有:";
            foreach (TreeNode item in TreeView1.CheckedNodes)
            {
                WhatsChecked.Text += "<li>";
                WhatsChecked.Text += item.Text + "</br>";
                chapterID[i] = item.Value.ToString();
                i++;
                WhatsChecked.Text += "</li>";            }
            WhatsChecked.Text += "</ul>";
            Button2.Visible = true;
        }
        else
        {
            WhatsChecked.Text = "您未进行任何选择!";
        }
        for (int j = 0; j < 100; j++)
        {
            Response.Write(chapterID[j]);
        }
    }
假如我选择的是“路基”,输出的ChapterID是
02020202030204020202020302040202020203020402020202030204
还请高手给解释一下。

解决方案 »

  1.   

    chapterID[i] = item.Value.ToString(); 
    是否这儿有问题
      

  2.   

    我调试了一下,整个OnCheckChanged()事件一共运行了四次,也就是说当我选择了父节点“路基”时,一共触发四次这个事件,因此chapterID也输出了四次。但是这个输出循环也没办法写在OnCheckChanged()事件外边啊,还请大家帮忙。
      

  3.   

    这个事件就是这样工作的啊,不如你写在另一个事件里,遍历所有checked的节点好了~
      

  4.   

    建议跟踪每一次进 OnCheckChanged 事件时是哪个节点。实在无法解决多次循环的问题的话,考虑在进事件时增加过滤条件。
      

  5.   

    应该是treeview控件里什么属性没设置好,选择父节点的时候,默认选择了子节点