简体   繁体   English

C#将孩子添加到父母treeView

[英]C# add child to Parents treeView

my database 我的数据库

CREATE TABLE [dbo].[tb1] (
    [name]         NVARCHAR (MAX) NOT NULL,
    [code]         INT            NOT NULL,
    [sub]          BIT            NOT NULL,
    [level]        INT            NOT NULL,
    [Sub_Lang] NVARCHAR (MAX) NOT NULL,
    PRIMARY KEY CLUSTERED ([code] ASC)
);

my data to database 我的数据到数据库

name | code | sub   | level | Sub_Lang
.net | 100  | false |   0   |   0
C#   | 101  | true  |   1   |  100
VB   | 102  | true  |   1   |  100
asp  | 103  | true  |   2   |  100_101
asp  | 105  | true  |   2   |  100_102
mvc  | 104  | true  |   3   |  100_101_103
php  | 106  | false |   0   |  0

I can read from the database 我可以从数据库中读取

DataTable dt1

for (int i = 0; i < dt1.Rows.Count; i++)
{
    treeView1.Nodes.Add(dt1.Rows[i].Field<int>("code").ToString(),
                        dt1.Rows[i].Field<string>("name").ToString());
    treeView1.Nodes[i].Tag = dt1.Rows[i].Field<int>("code").ToString();
}

But I can not show the treeView In this case 但是在这种情况下我无法显示treeView

.net
    c#
       asp
       mvc
    VB
       asp
php

how I show in treeView 我如何在treeView中显示

I'm sorry OK Edit 对不起,确定

May be not best solution, but still give it a try. 可能不是最好的解决方案,但请尝试一下。

I have used Sub_Lang column of datatable to build hierarchy of TreeView. 我已经使用数据表的Sub_Lang列来构建TreeView的层次结构。 Used Dictionary to store tree nodes. 使用Dictionary来存储树节点。 Code column is used as key. Code列用作键。

private void LoadTreeView(DataTable dt)
    {
        var dNodes = new Dictionary<string, TreeNode>();

        foreach (DataRow dRow in dt.Rows)
        {
            string sSublang = dRow["Sub_lang"].ToString();
            string sCode = dRow["code"].ToString();
            string sName = dRow["name"].ToString();

            if (sSublang == "0")
            {
                var tn = treeView1.Nodes.Add(sCode, sName);
                dNodes.Add(sCode, tn);
            }
            else
            {
                string[] arrSubLang = sSublang.Split('_');

                for (int i = arrSubLang.Length - 1; i >= 0; i--)
                {
                    string sFindCode = arrSubLang[i];
                    var tnLastParent = default(TreeNode);

                    if (dNodes.ContainsKey(sFindCode))
                    {
                        var tn = dNodes[sFindCode];

                        if (tnLastParent != default(TreeNode))
                        {
                            tn.Nodes.Add(tnLastParent);
                            tnLastParent = tn;
                        }
                        else if (!dNodes.ContainsKey(sCode))
                        {
                            tnLastParent = tn.Nodes.Add(sCode, sName);
                            dNodes.Add(sCode, tnLastParent);
                        }
                    }
                }

            }
        }

        treeView1.ExpandAll();
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM