我想实现以下一个功能:
  数据库中有个表,里边有2个字段分别为:FileName(varchar),Document(varchar).
一个FileName对应一个或多个Document,我想在树下显示FileName,然后在FileName下边显示
FileName对应的那一个或多哥Document.
  这要怎么实现?
  下边是把FileName显示在树下的实现代码,下一步如何把Document以对应的FileName的子节
点显示下面呢?
  
  private void frmTreeView_Load(object sender, EventArgs e)
        {
            string sqlConn = "data source=.;database=bfbc;uid=sa;pwd=sa";
            System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(sqlConn);
            conn.Open();
            string selectSql = "select FileName,VehicleConfigureDocument from DemarcateRelatingDocument";
            DataTable dt=new DataTable("DemarcateRelatingDocument");
            System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(selectSql, sqlConn);
            int fillNum = 0;
            fillNum=da.Fill(dt);
            for (int i = 0; i < fillNum; i++)
            {
                this.treeView1.Nodes.Add(dt.Rows[i][0].ToString());
            }
            conn.Close();
        }
  
  帅哥美女们帮帮小弟,小弟在次先谢谢了.

解决方案 »

  1.   

    sql语句的构造问题1对多的关系?为什么不分表?
      

  2.   

    想象树丛无到有的生成过程。
    假如取回来的数据是
    FileName        Document
    root1             node1              1
    root1             node2              2
    roor2             node3              3
    root1             root4              4一行行读嘛,
    1来了,什么都没有,那就是
    root1
      |
      -- node1
    2来了,root1已经存在
    root1
      |
      -- node1
      |
      -- node2
    3来了,root2不存在
    root1
      |
      -- node1
      |
      -- node2
    root2
      |
      -- node3
    4来了,root2已经存在
    root1
      |
      -- node1
      |
      -- node2
    root2
      |
      -- node3
      |
      -- node4
    那现在问题是不是就简单了?
      |
      -- 
      

  3.   

    你意思是我写两个sql语句,分别取到FileName和Document,然后再加到树的节点上去?
    取到那FileName和Document没有问题,关键是我怎么把Document加到FileName节点的下边?
    楼上的哥们能不能详细点?
    我想实现的效果是这样的:
    FileName1
      ...Document1
      ...Document2
    FileName2
      ...Document3
      ...Document4
      ...Document5
    FileName3
      ...Document6
    FileName4
      ...Document7
      

  4.   


    就是这个意思,这样就有思路,1来了什么都没有,那我this.treeView1.Nodes.Add(root1);
    那下一步呢我怎么用代码把node1加到root1下边呢?
    this.treeView1.Nodes["root1"]下边好象没有添加子节点的方法了,是我没找到吗?
      

  5.   

    首先:
    抽取所有DOCUMENT
    Select Distinct Document From table
    sqlReader=....
    循环读取:
    While (sqlReader.Read())
    {
      TreeNode tnDocument=new TreeNode(sqlReader["Document"].tostring());
      treeView1.Nodes.Add(tnDocument);
      sql="Select File Form table " +
        "Where Document=" + sqlReader["Document"].tostring();
      sqlReaderFile=.....
      While (sqlReaderFile.Read())
      {
        TreeNode tnFile=new TreeNode(sqlReaderFile["File"].toString());
        tnDocument.Nodes.Add(tnFile);
      }
      
    }就好了。
      

  6.   

    题目看错,是一个FILE多个DOCUMENT咯。以上代码是一个DOCUMENT对应多个FILE。
    那么反一反就可以了。
    上面代码里面把FILE改为DOCUMENT,把DOCUMENT改为FILE就可以了。
      

  7.   

    楼上的哥们,这样不行啊.
    上边sqlReader.Read()
    读一次后又不能关闭,不关闭下边的sqlReaderFile.Read()又读不了.
    这个该怎么解决呢?
      

  8.   

    各位同仁,哪位能帮我分析下边的代码啊? private void frmTreeView_Load(object sender, EventArgs e)
            {
                string sqlConn = "data source=.;database=bfbc;uid=sa;pwd=sa";
                System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(sqlConn);
                conn.Open();
                string selectSql = "select FileName,VehicleConfigureDocument from DemarcateRelatingDocument";
                DataTable dt=new DataTable();
                System.Data.SqlClient.SqlDataAdapter da=new System.Data.SqlClient.SqlDataAdapter(selectSql,conn);
                int rtnNum=0;
                rtnNum=da.Fill(dt);
                for (int i = 0; i < rtnNum; i++)
    {
                    TreeNode fileNameNode = new TreeNode(dt.Rows[i][0].ToString());
                    if (!this.treeView1.Nodes.Contains(fileNameNode))
                    {
                        this.treeView1.Nodes.Add(fileNameNode);  
                    }
                    TreeNode documentNode = new TreeNode(dt.Rows[i]["VehicleConfigureDocument"].ToString());
                    if (!fileNameNode.Nodes.Contains(documentNode))
                    {
                        fileNameNode.Nodes.Add(documentNode);
                    }
    }
                conn.Close();
            }以上代码实现的是一个树,表中有FileName和VehicleConfigureDocument 两个字段,以FileName为结点,把VehicleConfigureDocument 做为其子节点加上,FileName对应一个或多个VehicleConfigureDocument ,有多个VehicleConfigureDocument 的话都加在FileName下边.
    但是以上代码会是这样的结果:
    FileName1
     ...VehicleConfigureDocument1 
    FileName2
     ...VehicleConfigureDocument2 
    FileName3
     ...VehicleConfigureDocument3 
    FileName1
     ...VehicleConfigureDocument2 
    怎么能实现这样的:
    FileName1
     ...VehicleConfigureDocument1 
     ...VehicleConfigureDocument1 
    FileName2
     ...VehicleConfigureDocument2 
    FileName3
     ...VehicleConfigureDocument3 
    也就是我如何来判断在加如第二个...VehicleConfigureDocument1 时已经有一个FileName1了,不再新加一个FileName1了.
    怎么来找树中已经有了FileName1这个节点呢?
    代码中红色的那句,那样的判断为什么不起作用呢?