C#将child添加到Parents treeView

时间:2014-08-20 03:20:01

标签: c# treeview

我的数据库

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)
);

我的数据到数据库

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

我可以从数据库中读取

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();
}

但我无法显示treeView在这种情况下

.net
    c#
       asp
       mvc
    VB
       asp
php

我如何在treeView中显示

对不起,确定编辑

1 个答案:

答案 0 :(得分:0)

可能不是最好的解决方案,但还是试一试。

我使用了Sub_Lang数据表列来构建TreeView的层次结构。 使用Dictionary存储树节点。 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();
    }
相关问题