我创建了一个树状视图,但是有问题。
在我的代码节点中像这样重复添加;
我该如何解决和编码此问题?
我的数据是
Column1 Column2
category subcategory
category subcategory2
category subcategory3
test subtest
test subtest2
我的代码;
SqlConnection con = new SqlConnection("Data Source=test;Initial Catalog=test;Integrated Security=True;");
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("select * from mytable", con);
da.Fill(dt);
treeView1.Nodes.Add("Documents");
foreach (DataRow dr in dt.Rows)
{
TreeNode nod = new TreeNode(dr["kategori"].ToString());
nod.Nodes.Add(dr["altkategori"].ToString());
treeView1.Nodes.Add(nod);
}
答案 0 :(得分:0)
TreeView不能像字典一样工作
如果您想要这种行为,则需要自己正确构建树。
如果停留在两层,那么事情就很容易了:只需使用new Dictionary<string, List<string>>();
并添加子类别即可。
稍后,您可以遍历字典中的项目,并相应地创建子节点。
答案 1 :(得分:0)
您应该检查具有相同文本的现有节点并重新使用它,并仅在必要时创建一个新节点。
foreach (DataRow dr in dt.Rows)
{
TreeNode nod = treeView1.Nodes.Find(dr["kategori"].ToString());
if (nod == null)
{
nod = new TreeNode(dr["kategori"].ToString());
treeView1.Nodes.Add(nod);
}
nod.Nodes.Add(dr["altkategori"].ToString());
}
答案 2 :(得分:0)
事实是,您分别为每个category
和test
创建了另一个subcategory
和subtest
节点。
使用LINQ GroupBy method会将altkategori
分组到同一kategori
节点内:
treeView1.Nodes.Add("Documents");
foreach (IGrouping<string, string> kategori in dt.Rows.Cast<DataRow>().GroupBy(dr => dr["kategori"].ToString(), dr => dr["altkategori"].ToString()))
{
TreeNode nod = new TreeNode(kategori.Key); // node with kategori text
foreach (string altkategori in kategori) // foreach subnode in kategori
nod.Nodes.Add(altkategori); // add another altkategori node in
treeView1.Nodes.Add(nod); // add your final kategori node
}
如果您对LINQ不确定,和/或需要更多说明,请告诉我。