c#winfrom treeview递归问题

图片说明

我遇到了一个问题,需要将一张表里的数据,弄成treeview形式,
sql 文件是这个

https://www.wenwenlove.cn/my/script.sql ,我放到我服务器上了

这个表里目前有4级结构,分别是1,2,3,4,后面可能有5,或则。。。
能帮我解决的万分感谢

TreeNode tn1 = treeView1.Nodes.Add("", "存货分类");
DataTable dt =DBHelpr.Query("select clnvCCode,clnvCName,ilnvCGrade,blnvCend from InventoryClass");

       // cometree(tn1.Nodes, dt, "",1);

        DataTable dts = GetNewDataTable(dt, "ilnvCGrade=" + 1, "clnvCName asc");
        for (int i = 0; i < dts.Rows.Count; i++)
        {
            tn1.Nodes.Add(dts.Rows[i]["clnvCName"].ToString(), dts.Rows[i]["clnvCName"].ToString());
            if (dts.Rows[i]["blnvCend"].ToString()=="0")
            cometree(tn1.Nodes[i].Nodes, dt, dts.Rows[i]["clnvCCode"].ToString(), 2);
        }

                     public void cometree(TreeNodeCollection tn, DataTable dt, string zkey, int ilnvCGrade)
    {
        DataTable dts = GetNewDataTable(dt, "clnvCCode like'" + zkey + "%' and ilnvCGrade=" + ilnvCGrade, "clnvCName asc");
        for (int i = 0; i < dts.Rows.Count; i++)
        {
            tn.Add(dts.Rows[i]["clnvCName"].ToString(), dts.Rows[i]["clnvCName"].ToString());
            if (dts.Rows[i]["blnvCend"].ToString() == "0")
            cometree(tn[i].Nodes, dt, dts.Rows[i]["clnvCCode"].ToString(), ilnvCGrade+1);
        }
    }

    /// 执行DataTable中的查询返回新的DataTable
    /// </summary>
    /// <param name="dt">源数据DataTable</param>
    /// <param name="condition">查询条件</param>
    /// <returns></returns>
    private DataTable GetNewDataTable(DataTable dt, string condition, string sortstr)
    {
        DataTable newdt = new DataTable();

        newdt = dt.Clone();
        DataRow[] dr = dt.Select(condition, sortstr);
        for (int i = 0; i < dr.Length && i < 200; i++)
        {
            newdt.ImportRow((DataRow)dr[i]);
        }

        return newdt;//返回的查询结果
    }

这不就是编号吗?除去根节点 ,两位数字的一定在一层,四位的一定在第二层,只不过前两位是上层的编号,最后两位是本层编号,
比如01 02 03 是第一层的编号,0101 0102 是 第一层的01 下面01号 和01层下面的02号,第三层的一定是六位 010101 =》 01-01-01 是 01下面的01 下面的01 号,
依次类推啊,第四层是八位数 ,第五层是十位啊,。blnvEnd 代表是否是叶节点,0 没有后代节点 =》叶节点 ,1 代表还有=》非叶节点。

你不是已经有规律了吗 一级节点cInvCCode长度是2 往后每级节点cInvCCode长度加2 直接根据cInvCCode就可以把层级关系关联出来啊
select * from InventoryClass where cInvCCode like '__' 查一级节点

select * from InventoryClass where cInvCCode like '01__' 查01下的二级节点

tn1=treeComboBox1.Nodes.Add("", "存货分类");
DataTable dt = "select clnvCName,ilnvCGrade from 存货分类";

        cometree(tn1.Nodes, dt, "");  

public void cometree(TreeNodeCollection tn, DataTable dt, string zkey)
    {
        DataTable dts = GetNewDataTable(dt, "ilnvCGrade='" + zkey + "'", "clnvCName asc");
        for (int i = 0; i < dts.Rows.Count; i++)
        {
            tn.Add(dts.Rows[i]["clnvCName"].ToString(), dts.Rows[i]["clnvCName"].ToString());
            cometree(tn[i].Nodes, dt, (Convert.toInt32(dts.Rows[i]["ilnvCGrade"].ToString())-1).Tostring());
        }
    }

    /// 执行DataTable中的查询返回新的DataTable
    /// </summary>
    /// <param name="dt">源数据DataTable</param>
    /// <param name="condition">查询条件</param>
    /// <returns></returns>
    private DataTable GetNewDataTable(DataTable dt, string condition, string sortstr)
    {
        DataTable newdt = new DataTable();

            newdt = dt.Clone();
            DataRow[] dr = dt.Select(condition, sortstr);
            for (int i = 0; i < dr.Length && i < 200; i++)
            {
                newdt.ImportRow((DataRow)dr[i]);
            }

        return newdt;//返回的查询结果
    }

图片说明
图片说明

//**
    //* 
    //* length, 起始值  0
    //* pNode,  节点
    //* code   //长度从0开始
    //*

    public void add(int length,TreeNode pNode,String code){
        db = DBHelper.Query("select  * from inverntoryclass where cInvCCode like  '" + code + "'+'%' and len(cInvCCode)='" + length + "'+2", "inverntoryclass");
        for (int i = 0; i < db.Rows.Count; i++)
        {
            TreeNode Node = new TreeNode();
            //如果 binCend=1表示是没有子节点
            if (db.Rows[i]["binCend"].ToString() == "1")
            {
                //treeview添加
                //父节点添加子节点,不用递归了
                treeView1.Nodes.Add(Node);
            }
            else
            {
                //有子节点
                //treeview添加子节点 ,递归操作
                pNode.Nodes.Add(Node);
                add(length + 2, Node, code);
            }
        }
    }

    private void Form4_Load(object sender, EventArgs e)
    {
         TreeNode pNode = null;
         add(0, pNode, "0");

    }

private void button1_Click(object sender, EventArgs e)
{
TreeNode tvroot = new TreeNode("存货分类");
treeView1.Nodes.Add(tvroot);
//生成第一级
DataTable dt = GetData("SELECT * FROM dbo.InventoryClass WHERE iInvCGrade=1");
for (int i = 0; i < dt.Rows.Count; i++)
{
TreeNode t1 = new TreeNode(dt.Rows[i]["cInvCName"].ToString());
tvroot.Nodes.Add(t1);

            if (dt.Rows[i]["bInvCEnd"].ToString() == "False")
            {
                BuildTree(t1, dt.Rows[i]["cInvCCode"].ToString(), 2);
            }
        }
    }

    public void BuildTree(TreeNode tvRoot, string strType, int iLevel)
    {
        DataTable dt = GetData("SELECT * FROM dbo.InventoryClass WHERE cInvCCode LIKE '" + strType + "%' and iInvCGrade=" + iLevel.ToString());
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            TreeNode t1 = new TreeNode(dt.Rows[i]["cInvCName"].ToString());
            tvRoot.Nodes.Add(t1);

            if (dt.Rows[i]["bInvCEnd"].ToString() == "False")
            {
                BuildTree(t1, dt.Rows[i]["cInvCCode"].ToString(), iLevel + 1);
            }
        }
    }


    public DataTable GetData(string strSql)
    {
        string strConn = "data source=192.168.1.100;initial catalog=tempdb;user id=sa;password=123abcABC!@#;";
        Common.DbContextBase.EzagooDataBaseSingle db = new Common.DbContextBase.EzagooDataBaseSingle(strConn);
        try
        {
            db.OpenDB();
            return db.Query(strSql);
        }
        catch (System.Exception ex)
        {                
            return null;
        }
        finally
        {
            db.CloseDB();
            db = null;
        }
    }




    ![图片说明](https://img-ask.csdn.net/upload/201803/15/1521103737_959227.png)

    ![图片说明](https://img-ask.csdn.net/upload/201803/15/1521103746_247199.png)

    ![图片说明](https://img-ask.csdn.net/upload/201803/15/1521103753_324741.png)

图片说明

图片说明

图片说明