是这样子,我有一个txt文件
内容格式:
1xx
(tap)1.1xx
2xx
(tap)2.2xx
(tap)(tap)2.2.2xx
3xx
(tap)3.1xx
4xx
(tap)4.1xx
....我要将它载入treeview并实现格式的级别
另check=true;如果我先选择了第一级,则其下面的子级全选,又如何实现。
还有就是,如何统计数目,即:1.1xx是一个,2.2.2xx又是一个(2.2xx不算),
   

解决方案 »

  1.   

    先把txt文件读到内存,然后分析你的文件,接着创建TreeNode实例并添加到TreeView控件上;至于统计数目,可以在分析文件的时候去统计,如果是动态的添加删除的话,则在需要的时候再统计吧;
      

  2.   

    嗯,会一点吧,
    我目前能够实现到分两级,之前以为是一个tap和两个tap的区别,所以第二个if,但第三级我分不出,
    如下,//是后来加的,目的是再分下一级(按txt打开的确是两个tap和一个tap的区别。
                StreamReader sr = new StreamReader(sfn);
                string tmpStr="";
                int tvNode = -1;
                int subNodeIndex = -1;
                while (!(sr.Peek() == -1))
                {
                    tmpStr = sr.ReadLine();
                    if (tmpStr.StartsWith("\t"))
                    {
                        
                        dtv.Nodes[tvNode].Nodes.Add(tmpStr);
                 //       subNodeIndex++;
                     }
                 //   else if (tmpStr.StartsWith("\t\t"))//之前还这么写("\t"+"\t")
                 //   {
                 //       dtv.Nodes[tvNode].Nodes[subNodeIndex].Nodes.Add(tmpStr);
                    }
                    else
                    {
                       dtv.Nodes.Add(tmpStr);
                        tvNode++;
                  //      subNodeIndex = -1;//新的根节点
                    }                初级水平,请赐教!
      

  3.   

    你子结点是用Tab符来开头的?如果是N级的话,你那多个if就不适用了,还是用迭代来确定当前行是第几级吧;
      

  4.   

    1xx 
    (tap)1.1xx 
    2xx 
    (tap)2.2xx 
    (tap)(tap)2.2.2xx 
    3xx 
    (tap)3.1xx 
    4xx 
    (tap)4.1xx 
    .... 其实你完全没有必要理会Tab分隔符,因为每行的ID(1.1xxx,2.2xxx,2.2.2xx)就确定了当前行所属的级别,
      

  5.   

    上面给的是例子而已,实际上并没有ID,全是文字,是别人已经写好了,我只是想读进来,以后要加ID可以通过写出去的话,那个可能会好实现些吧。
    我的子节点不是TAP开头的吧,反正我用我的程序读的是挺好的,第三级还是加到第二级了,我想应该是怎么计算每行前面到底是几个空格的问题?还是别的方法?
      

  6.   

    我想应该是怎么计算每行前面到底是几个空格的问题?string xml;
    ....//读取文本文件中的一行数据到xml变量中;
    int spacecount=xml.Length - xml.TrimStart(new char[] { ' ' }).Length;
      

  7.   

    报告掌柜,看不太懂的你算法,经测试得到的全是0,不过我改成这样
    int spaceCount = xml.Length-(xml.Trim()).Length
    得到值0,1,2,三级。怎么解释呢(tap),另外能实现是每行正好后面没有空格
    思路也差不多这样了吧,不知道还有没有好的办法
      

  8.   

    多谢掌柜的,呵呵!
    结贴去:按你的作法:
    int spaceCount = xml.Length - (xml.TrimStart(new char[] { '\t' })).Length;
    成功!