private void buildTree(TreeView tv, string kind)
    {
        tv.Nodes.Clear();
        string sql = "";
        switch (kind)
        {
            case "t_RepairItemDetail":
                 sql = "select isNull(ItemIDParentID,'') as ItemIDParentID,ItemID,ItemName,ItemStandHours from t_RepairItemDetail where 1=1 order by ItemID";
                break;
        }
        DataTable dt = DBHelp.ReturnDataTable(sql, kind);
        TreeNode tempNode = null;
        TreeNode tempNodeFirst = null;
        string strItemID= "";
        string strItemName = "";
        string strItemIDParentID = "";
        tempNodeFirst = new TreeNode();
        tempNodeFirst.Value = "";
        tempNodeFirst.Text = "全部";
        tv.Nodes.Add(tempNodeFirst);
        
        for (int i = 0; i < dt.Rows.Count; i++)
        {            strItemID = dt.Rows[i]["ItemID"].ToString();
            strItemName = dt.Rows[i]["ItemName"].ToString();
            strItemIDParentID= dt.Rows[i]["ItemIDParentID"].ToString();
            if (strItemIDParentID == "")
            {
                tempNode = new TreeNode();
                tempNode.Value = strItemID;
                tempNode.Text = strItemID + ":" + strItemName;
                tempNodeFirst.ChildNodes.Add(tempNode);
            }
            else
            {
                while ( strItemID.Substring(0, ( strItemID.Length <= tempNode.Value.Length ?  strItemID.Length : tempNode.Value.Length)) != strItemIDParentID)
                {
                    if (tempNode.Parent != null)
                    {
                        tempNode = ((TreeNode)tempNode.Parent);
                    }
                    else
                    {
                        tempNode = new TreeNode();
                        tempNode.Value = strItemID;
                        tempNode.Text = strItemID + ":" + strItemName;
                        tempNodeFirst.ChildNodes.Add(tempNode);
                        break;
                    }
                    strItemIDParentID = tempNode.Value;
                }                TreeNode node1 = new TreeNode();
                node1.Value = strItemID;
                node1.Text = strItemID + ":" + strItemName;
                tempNode.ChildNodes.Add(node1);
                tempNode = node1;
            }
        }
        tv.ExpandDepth = 3;
    }  while ( strItemID.Substring(0, ( strItemID.Length <= tempNode.Value.Length ?  strItemID.Length : tempNode.Value.Length)) != strItemIDParentID)
这局代码中的tempNode的值是从哪里来的?我这里写的是一个TreeView绑定

解决方案 »

  1.   

    难看我正在使用《Csdn收音机》第一时间获取最新动态!
      

  2.   

    while循环体里面来的,第一次执行时tempnode为null
    ,第一次以后执行 根据while循环体里的tempnode值,判断while的条件,
      

  3.   

    TreeNode tempNode
    不是你声明的么?从这来的
    tempNode = new TreeNode();
                    tempNode.Value = strItemID;
                    tempNode.Text = strItemID + ":" + strItemName;
      

  4.   

    我觉得这个代码应该编译不能通过,在if里面定义的tempNode在else里面不可以直接使用。应该是代码的问题吧,如果将tempNode放在if外面定义应该就对了。
      

  5.   

            DataTable dt = DBHelp.ReturnDataTable(sql, kind);
            TreeNode tempNode = null;        TreeNode tempNodeFirst = null;
            string strItemID= "";
            string strItemName = "";
            string strItemIDParentID = "";
                   tempNode = new TreeNode();
                    tempNode.Value = strItemID;
                    tempNode.Text = strItemID + ":" + strItemName;
                    tempNodeFirst.ChildNodes.Add(tempNode);