坦白说不是不去理解,是任务太赶时间了,没空去理解(明天晚上搞不定扣钱。。)
数据库Pro_ST_ID     Pro_ST_ParentID      Pro_ST_Name
0 0 货品类别
1 0 全部
2 1 数码产品
3 1 建筑材料
4 1 劳保
tvGoodsClass 请问如何进行绑定?
    private void BinDingGoodsClass(int ParentID, TreeNode pNode,DataTable dt)
    {
        DataView tmpDataView = new DataView(dt);        tmpDataView.RowFilter = "[pro_st_parentid] = " + ParentID;        foreach (DataRowView drv in tmpDataView)
        {
            TreeNode tn = new TreeNode();            if (pNode == null)
            {
                //添加根节点
                tn.Text = drv["Pro_ST_Name"].ToString();
                tn.Value = drv["pro_st_id"].ToString();
                tvGoodsClass.Nodes.Add(tn);
                tn.Expanded = true;
                BinDingGoodsClass(Int32.Parse(drv["pro_st_parentid"].ToString()), tn,dt);
            }
            else
            {
                //添加当前节点的子节点
                tn.Text = drv["Pro_ST_Name"].ToString();
                pNode.ChildNodes.Add(tn);
                tn.Expanded = true;
                BinDingGoodsClass(Int32.Parse(drv["pro_st_parentid"].ToString()), tn,dt);
                //再次递归
            }
        }
    }自己修改别人的。好像不太行
时间紧迫,解决问题马上给分

解决方案 »

  1.   

    http://www.cnblogs.com/bboy/archive/2010/04/04/1703986.html我递归生成xml,
    道理一样的,把节点传进去,递归节点下级节点
      

  2.   

    这个需要生成xml的个人不太想用,有没有方法我直接生成DataTable和获取Pro_ST_ParentID做递归然后加载treeview的?可以给出函数吗?搞定立马结贴给分。
      

  3.   

        /// <summary>
        /// 树形递归方法
        /// </summary>
        public void TreeViewBind()
        {
            try
            {
                //将查询结果返回到SqlDataReader
                OleDbDataReader dr = AccessDBOperation.GetDataReader("select * form XX");
                //返回树节点最大ID号
                object obj = AccessDBOperation.GetCmdScalar("Select Max(autoID) form XX);
                //将树节点最大ID号转换为int型
                int count = 0;
                if (obj != System.DBNull.Value)
                {
                    count = int.Parse(obj.ToString());
                }
                //定义对象数组
                TreeNode[] myNodes = new TreeNode[count + 1];
                //初始化对象数组
                for (int i = 0; i < myNodes.Length; i++)
                {
                    myNodes[i] = new TreeNode();
                }
                //从表中取数据 构建树型
                while (dr.Read())
                {
                    int iParentNodeId = 0;
                    if (dr[parentID] == System.DBNull.Value)
                    {
                        iParentNodeId = 0;
                    }
                    else
                    {
                        iParentNodeId = (int)dr[parentID];
                    }
                    int iMyNodeId = (int)dr[autoID];
                    if (iParentNodeId != 0)
                    {
                        //显示的节点名称来自类别名称
                        myNodes[iMyNodeId].Text = dr[nodeText].ToString();
                        //给每个新增的节点添加事件
                        myNodes[iMyNodeId].SelectAction = TreeNodeSelectAction.Expand;
                        //给每个节点的值,添加在商品分类的级联值
                        myNodes[iMyNodeId].Value = dr[nodeValue].ToString();
                        //设置每个节点超链接指向的Target框架
                        myNodes[iMyNodeId].Target = nodeTarget;
                        //根据级联值和Get方法传递到本页面的主表mXxUniNo值生成每个节点的超链接
                        myNodes[iMyNodeId].NavigateUrl = nodeURL;
                        //递归添加下一个节点
                        myNodes[iParentNodeId].ChildNodes.Add(myNodes[iMyNodeId]);
                    }
                    else
                    {
                        //如果指定分类地下没有节点数据可读,跳出本节点,然后继续添加下一个分类名称节点
                        myNodes[iMyNodeId].Text = dr[nodeText].ToString();
                        myNodes[iMyNodeId].SelectAction = TreeNodeSelectAction.None;
                        tvTmpTreeView.Nodes.Add(myNodes[iMyNodeId]);
                    }
                }
                //默认treeview加载时展开的节点深度,现在默认为2层
                tvTmpTreeView.ExpandDepth = 1;
                dr.Close();
                dr.Dispose();
            }
            catch (Exception ex)
            {
                DataBaseAidClass.WhriteErrLog(ex.Message);
            }
        }