如何用c#在树视图中显示SQL数据(4级深度)



我有一个名为Notebook的SQL表。包含以下字段(所有字符串)的注释:

<表类> 标签 与 主题 指出 ERP项目 Doe, Mary 进度报告 09/09/2021上午9:00 -没有问题 工程师项目 Doe, Randy 进度报告 09/10/2021上午10:00 -大问题。 工程项目 Doe, Randy 问题 2021年10月9日下午1:00 -需要增加2名工程师 ERP项目 Doe, Mary 进度报告 2021年9月16日上午9:00 -没有问题 员工例会 IT员工 每月例会 2012.9.29上午11:00 - issue w/Server

您需要跟踪每个级别的节点,并以嵌套的方式添加它们。像这样:

treeView1.Nodes.Clear();
const string query = @"
SELECT *
FROM Notebook.Notes
ORDER BY Tab, Contact, Subject;
";
using (var cn = new SqlConnection(YourConnectionString))
using (var cm = new SqlCommand(query, cn))
{
cn.Open();
TreeNode tab = null;
TreeNode contact = null;
TreeNode subject = null;
using (var dr = cm.ExecuteReader())
{
while (dr.Read())
{
if(tab?.Text != (string)dr["Tab"])
{
tab = new TreeNode((string)dr["Tab"]);
treeView1.Nodes.Add(tab);
}
if(contact?.Text != (string)dr["Contact"])
{
contact = new TreeNode((string)dr["Contact"]);
tab.Nodes.Add(contact);
}
if(subject?.Text != (string)dr["Subject"])
{
subject = new TreeNode((string)dr["Subject"]);
contact.Nodes.Add(subject);
}
subject.Nodes.Add(new TreeNode((string)dr["Notes"]);
}
}
}

指出:

  • 要使这段代码正常工作,您需要在SQL中有一个ORDER BY。如果没有,则需要另一种方法来跟踪节点,例如Dictionary
  • 注意使用SqlConnection,不要缓存它注意using块的使用
  • 可以缩短代码稍微
if(tab?.Text != (string)dr["Tab"])
treeView1.Nodes.Add(tab = new TreeNode((string)dr["Tab"]));
  • 然而,这种语法可能会让一些人感到困惑

最新更新