编号 层次 上级编号(这一列是我新增的,下面的数据也是我给出的示例)
s101 1 null
s102 2 s101
s103 2 s101
s104 3 s103
s105 2 s101
s106 3
s107 4
s108 5 s107
s109 6 这是一个类树形结构,现要求根据层次求出每个节点的上级编号编号和层次2列是我从excel表中取出的数据,是按顺序取的,顺序不能乱
层次一栏可看成是 int [] grade = {1,2,2,3,2,3,4,5,6}
那么grade [1] 和grade [2]的上级编号都是grade [0]的编号,但grade [5]的上级编号是按从上到下顺序上离它最近的上级节点grade[4]的编号。

解决方案 »

  1.   

    你最好弄个列子

    s101 1 null 
    s102 2 s101 
    s103 2 s101 
    s104 3 s103 
    s105 2 s101 
    s106 3 
    s107 4 
    s108 5 s107 
    s109 6 
    当我要 s109 6 它的上级目录是什么
           s108 5 s107  它的上级目录是什么
           s106 3 它的上级目录是什么
          s107 4 它的上级目录是什么
    说不明白就得这样弄,让人看出个规律来。
      

  2.   

    获取excel中数据到dataset,再递归遍历数据形成树结构,上级编号为null或空的是根节点
      

  3.   

    这个意思?            string[] Id = { "s101", "s102", "s103", "s104", "s105", "s106", "s107", "s108", "s109" };
                int[] grade = { 1, 2, 2, 3, 2, 3, 4, 5, 6 };
                string[] parendId = new string[grade.Length];
                for (int i = 0; i < grade.Length; i++)
                {
                    if (grade[i] == 1)
                    {
                        parendId[i] = "null";
                        continue;
                    }
                    for (int j = i - 1; j >= 0; j--)
                    {
                        if (grade[j] == grade[i] - 1)
                        {
                            parendId[i] = Id[j];
                            break;
                        }
                    }
                }
                foreach (string s in parendId)
                    Console.WriteLine(s);/*
    输出:
    null
    s101
    s101
    s103
    s101
    s105
    s106
    s107
    s108
    */