从数据库中取数据,想把2个字段suBN1和suBN2下的数据列出,并且作为TreeView的一层节点,但是这2个字段的数据有重复,怎样把数据列出建好节点,且保证不能有重复?
比如数据库中:suBN1 包含:A,B,C,A,A,B。
              suBN2 包含:A,B,C,D,E,A。
现在我想得到A,B,C,D。C#语句该怎么写
小弟是菜鸟,请大侠多多帮助

解决方案 »

  1.   

    现将字段(字符串)加入ArrayList中,加入前判断是否已经存在(ArrayList.Contains())
    如果存在则不加入,不存在则加入,最后使用ArrayList建立Treeview
      

  2.   

    先定义一个数据结构Node,放入你要的数据库节点信息,另外新加一个value属性,表示你要显示的treeview节点的text
    class Node
    {
       private string value;
       public String Value
       {
          get{}
       }
       .......
    }在组成treeview的时候把
    string treeNodesValues = null;
    for(......遍历节点)
    {
       int index = treeNodesValues.indexOf(node.Value+"&&&&&&");
       if(index>=0)
       {
          //把节点加入treeview
          treeNodesValues = treeNodesValues + node.Value + "&&&&&&";
       }
    }其中“&&&&&&”起一个分割符号的作用
      

  3.   

    先把两个字段读到一个ArrayList中
    再遍历这个ArrayList是否有重复的存在.
      

  4.   

    DataTable dt = ...  //取数据for (int i=0;i<dt.rows.count;i++)
    {
        string s1=dt.rows[i]["suBN1"].tostring();
        string s2=dt.rows[i]["suBN2"].tostring();    if (!tv.Nodes.ContainsKey(s1))
        {
            tv.nodes.add(s1,s1)
        }    if (!tv.Nodes.ContainsKey(s2))
        {
            tv.nodes.add(s2,s2)
        }}
      

  5.   

    上面漏了两个分号,补上
    DataTable dt = ...  //取数据 for (int i=0;i <dt.rows.count;i++) 

        string s1=dt.rows[i]["suBN1"].tostring(); 
        string s2=dt.rows[i]["suBN2"].tostring();     if (!tv.Nodes.ContainsKey(s1)) 
        { 
            tv.nodes.add(s1,s1);
        }     if (!tv.Nodes.ContainsKey(s2)) 
        { 
            tv.nodes.add(s2,s2);
        } } 
      

  6.   

    tao77  的方法倒是看的懂,不过我不是那么从数据库里取的。我已经通过Common方法取出了数据,数据库里是这样的:BasinName字段分别二维工区和三维工区表里。假设3维工区表里BasinName 下的数据为:A B C D A B C
     Survey3DDA BN3 = new Survey3DDA();
                Dictionary<string, Survey3D> ltBN3 = BN3.GetAllSurvey3D();
                if (ltBN3 != null)
                {
                    foreach (Survey3D suBN3 in ltBN3.Values)
                    {
                        if (suBN3 != null && suBN3.BasinName != null)
                        {
                                       TreeNode nodetq = new TreeNode();
                                        nodetq.Tag = suBN3;
                                        nodetq.Text = suBN3.BasinName;
                                        treeView1.Nodes.Add(nodetq);
                          }
                     }
                 }
    建的节点为 






    C
    有重复。
      我需要用同样方法也从2维工区表BasinName下取数据:A B C E F
    把两次数据合并,并过滤重复(合并后应该只包含:A B C D E F),后再建节点。
       现在我就是不知道怎么把从数据库中取出的suBN3.BasinName和suBN2.BasinName合并并过滤重复。小弟刚学C#,不知道大家看的懂我意思不,看的懂教教我,急啊!!!
      

  7.   

    Survey3DDA BN3 = new Survey3DDA(); 
                Dictionary <string, Survey3D > ltBN3 = BN3.GetAllSurvey3D(); 
                if (ltBN3 != null) 
                { 
                    foreach (Survey3D suBN3 in ltBN3.Values) 
                    { 
                        if (suBN3 != null && suBN3.BasinName != null) 
                        { 
                             if (!treeView1.Nodes.ContainsKey(suBN3.BasinName))
                             {
                                  TreeNode nodetq = treeView1.Nodes.Add(suBN3.BasinName, suBN3.BasinName);
                                  nodetq.Tag = suBN3; 
                              } 
                          } 
                     } 
                 } 
      

  8.   


                string a = "a,b,c,d,d,c,a,e,f,e,a,f,a,p,s,a,k";
               
                string[] Alist;            char [] cr;            Alist = Regex.Split(a, ",");            foreach(string s in Alist)
                {               cr=s.ToCharArray();
                   int n = a.Split(cr).Length - 1;
                    
                    if (n > 1)
                    {
                        int co = a.IndexOf(s);
                        a = a.Remove(co, 2);
                    }
                
                }            MessageBox.Show(a.ToString());复制这段代去看看
      

  9.   

    不,我要把2个字段里的数据都取出来。
    ABCDAAA(有重复)
    ABEF
    如果不加判断选择,取出来后是2者的相加ABCDAAA ABEF
    我想把里面重复的去掉,只留ABCDEF。tao77的方法可以用。
    请问怎么结帖??第一次提问。
    刚学编程,上面的很多方法可能都行,但我看不懂,还是谢谢了。