前言
将表格内容展示到DataGridView,分层列表展示在TreeView。
表格:
目标列表形式:
一、添加控件
添加DataGridView,TreeView
二、内容展示在控件上
1.初始程序
代码如下:
namespace hello
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
TreeNode tno = new TreeNode("控制器");
DataTable table = new DataTable();
table.Columns.Add("设备名称");
table.Columns.Add("父节点");
table.Columns.Add("级别");
table.Rows.Add("端口N1A", "控制器", "0");
table.Rows.Add("执行器N11", "端口N1A", "1");
table.Rows.Add("中继器N1A", "端口N1A", "1");
table.Rows.Add("执行器N12", "端口N1A", "1");
table.Rows.Add("执行器N13", "中继器N1A", "2");
table.Rows.Add("执行器N14", "中继器N1A", "2");
//表格显示在dataGridView上
dataGridView1.DataSource = table;
//分层显示在treeView上
foreach (DataRow dy in table.Rows)
switch (dy["级别"].ToString())
{
case "0":
tno.Nodes.Add(dy["设备名称"].ToString(), dy["设备名称"].ToString());
break;
case "1":
if (tno.Nodes.Contains(tno.Nodes["端口N1A"]))
{
tno.Nodes["端口N1A"].Nodes.Add(dy["设备名称"].ToString(), dy["设备名称"].ToString());
}
break;
case "2":
if (tno.Nodes[0].Nodes.Contains(tno.Nodes[0].Nodes["中继器N1A"]))
{
tno.Nodes[0].Nodes[dy["父节点"].ToString()].Nodes.Add(dy["设备名称"].ToString());
}
break;
}
treeView1.Nodes.Add(tno);
}
}
}
效果:
2.程序优化
代码如下:
namespace hello
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
TreeNode tno = new TreeNode("控制器");
DataTable table = new DataTable();
table.Columns.Add("设备名称");
table.Columns.Add("父节点");
table.Columns.Add("级别");
table.Rows.Add("端口N1A", "控制器", "0");
table.Rows.Add("执行器N11", "端口N1A", "1");
table.Rows.Add("中继器N1A", "端口N1A", "1");
table.Rows.Add("执行器N12", "端口N1A", "1");
table.Rows.Add("执行器N13", "中继器N1A", "2");
table.Rows.Add("执行器N14", "中继器N1A", "2");
//表格显示在dataGridView上
dataGridView1.DataSource = table;
//分层显示在treeView上
void GetDeviceList(TreeNode node, DataRow dy)
{
foreach (TreeNode n in node.Nodes)
{
Console.WriteLine(n.Name + dy["父节点"].ToString());
if (n.Name == dy["父节点"].ToString())
{
n.Nodes.Add(dy["设备名称"].ToString(), dy["设备名称"].ToString());
}
//在这里读取n的内容
GetDeviceList(n, dy);
}
}
tno.Nodes.Add("控制器", "控制器");
table.DefaultView.Sort = "级别 Asc";
DataTable dm = table.DefaultView.ToTable();
foreach (DataRow dy in dm.Rows)
{
GetDeviceList(tno, dy);
}
treeView1.Nodes.Add(tno);
treeView1.Font = new Font("宋体", 14);
treeView1.ExpandAll();
}
}
}
效果: