我的数据库
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中显示
对不起,确定编辑
答案 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();
}