【问题标题】:C# add child to Parents treeViewC#将孩子添加到父母树视图
【发布时间】:2014-08-21 13:33:08
【问题描述】:

我的数据库

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

我如何在树视图中显示

对不起 好的 编辑

【问题讨论】:

  • 您可以根据Sub_Lang 列中的值构建树视图。是windows窗体应用还是asp.net?

标签: c# treeview


【解决方案1】:

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

我使用了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();
    }

【讨论】:

    猜你喜欢
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多