我看了你的《如何把树与数据库的信息进行绑定》这篇文章后,在访问数据库上有点问题想请教下:数据库表如下:
ID       YWBH     ZD_ID      PIC              PIC_NAME  ZSH     QLR         YT     
5 NULL 2004 <二进制数据> xgbdfg ASDF GHJ 公共建筑用地
6 NULL 2004 <二进制数据> xgbdfg ASDF GHJ 公共建筑用地
7 NULL 2005 <二进制数据> wsefsa ASDF GHJ 公共建筑用地
8 NULL 2005 <二进制数据> fgjfgj ASDF GHJ 公共建筑用地
9 NULL 2006 <二进制数据> fuleyou 2006 suo 商业金融业用地private DataTable CreateTable()
        {
            conn.Open();//打开数据库连接
            SqlDataAdapter da = new SqlDataAdapter("select * from T_DA_PIC", conn);//建立数据适配器
            DataTable dt = new DataTable();//新建一个DataTable
            da.Fill(dt);//进行数据填充
            return dt;//返回一个数据表dt
        }        
        private void CreateTree()
        {
            DataRow[] drArray = dt.Select("ZD_ID=0",
                                "ZD_ID ASC",
                                DataViewRowState.CurrentRows);
            if (drArray.Length == 0) return;
            TreeNode tnNew = null;
            foreach (DataRow dr in drArray)
            {
                tnNew = treeView1.Nodes.Add(dr["PIC_NAME"].ToString());
                tnNew.Tag = dr["ID"].ToString();//Save "EmployeeID" in node's tag
                CreateTreeNode(ref tnNew);
            }
        }
        private void CreateTreeNode(ref TreeNode tnParent)
        {
            //Get children data info
            DataRow[] drArray = dt.Select(
                string.Format("ZD_ID = {0}", tnParent.Tag),
                "ZD_ID ASC",
                DataViewRowState.CurrentRows);
            if (drArray.Length == 0) return;
            TreeNode tnNew = null;
            foreach (DataRow dr in drArray)
            {
                tnNew = tnParent.Nodes.Add(dr["PIC_NAME"].ToString());
                tnNew.Tag = dr["ID"].ToString();//Save "EmployeeID" in node's tag
                CreateTreeNode(ref tnNew);
            }
        }我运行之后treeView1里面什么都没有!各位知道的能帮我解答下吗?

解决方案 »

  1.   

    应该是!ZD_ID里的数据要有区别的!第一是父结点的ZD_ID 而且不能雷同必须是唯一的!你现在就不唯一了!所以就是不行了!
    因为你用的递归的方法在做
      

  2.   

    DataRow[] drArray = dt.Select("ZD_ID=0",
                                    "ZD_ID ASC",
                                    DataViewRowState.CurrentRows);
    你数据库表中的ZD_ID是2004,2005,2006....并没有改成代表根节点的0,或者子节点的1,2,3...
      

  3.   

    不是很明白两位说的意思。TO:hanzhuang639()   第一是父结点的ZD_ID 而且不能雷同必须是唯一的!
    这相当于 ,一个班有N个学生,那这要建树型的话,班级就是父节点阿 ,跟我这个不是一样的吗?Student_id Student_name    Class
    1             zhangshan        1
    2              lisi            1
    3              wangwu          2
    4              zhaoliu         2
    5              chenqi          3
      

  4.   

    你先看看你的表结构设计,主要是父子节点关联的字段是什么ps:我文章中的string.Format("EmpParentID = {0}", tnParent.Tag),那么父子节点关联的字段是“EmpParentID”,你只要对应到你的表中即可。
      

  5.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    try
    {
    sqlConn.Open();
    SqlDataAdapter sda=new SqlDataAdapter("select * from tab_dept_info",sqlConn);
    //SqlDataAdapter sda=new SqlDataAdapter("select * from oper_dept_Que where oper_id='0001'",sqlConn);
    DataSet ds=new DataSet();
    sda.Fill(ds);
    this.ViewState["ds"]=ds;
    }
    catch(Exception ex)
    {
                    Response.Write("连接数据库错误!"+ex.Message);
    }
    finally
    {
    sqlConn.Close();
    }
    SqlDataAdapter sda1=new SqlDataAdapter ("select top 1 higher_dept_id from tab_dept_info",sqlConn);
    //SqlDataAdapter sda1=new SqlDataAdapter ("select top 1 higher_dept_id from oper_dept_Que",sqlConn);
    DataSet ds1=new DataSet();
    sda1.Fill(ds1,"abc");
    string aa;
    aa=ds1.Tables["abc"].Rows[0]["higher_dept_id"].ToString();
    AddTree(aa, (TreeNode)null);
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion public void AddTree(string id,TreeNode pNode)
    {
    DataSet ds=(DataSet)this.ViewState["ds"];
    DataView dv=new DataView(ds.Tables[0]);
    dv.RowFilter="higher_dept_id = '"+id +"'";
    foreach(DataRowView row in dv)
    {
    TreeNode node=new TreeNode();
    if(pNode==null)
    //说明是根节点
    {
    int fid=Convert.ToInt32(row["dept_id"].ToString());
    node.Text=row["dept_name"].ToString();
    TreeView1.Nodes.Add(node);
    node.Expanded=true;
    node.NavigateUrl="PersinQueMain.aspx?PositionID="+fid+"";
    node.Target="main";
    //AddTree(Int32.Parse(row["dept_ID"].ToString()),node);
    AddTree(row["dept_ID"].ToString(),node);
    }
    else
    {
    int fid=Convert.ToInt32(row["dept_id"].ToString());
    node.Text=row["dept_name"].ToString();
    pNode.Nodes.Add(node);
    node.Expanded=true;
    node.NavigateUrl="PersinQueMain.aspx?PositionId="+fid+"";
    node.Target="main";
    //AddTree(Int32.Parse(row["dept_ID"].ToString()),node);
    AddTree(row["dept_ID"].ToString(),node);
    }
    }
    }
      

  6.   

    我是要实现以下的结构:
    2004
        ---xgbdfg
        ---sddf
    2005
        ----545255
        ----2656
    2006
        ----2546652
      

  7.   

    那你如下去做
    DataView dv = new DataView( yourDataTable, null, "ZD_ID ASC", DataViewRowState.CurrentRows );
    string strParentID = "";
    TreeNode tnParent = null;
    foreach( DataRowView drv in dv )
    {
         if( strParentID != drv["ZD_ID"].ToString() )
         {
             //Add parent node here
             strParentID = drv["ZD_ID"].ToString();
             tnParent = yourTreeView.Nodes.Add( strParentID );
         }
         tnParent.Nodes.Add( drv["PIC_NAME"].ToString() );
    }
      

  8.   

    Knight94(愚翁) 太神奇了!感谢老大!
     也感谢各位顶我的朋友!