C# 写个树形表格代码
时间: 2023-07-12 15:33:23 浏览: 72
以下是一个基于 C# WinForms 的树形表格代码示例:
```c#
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace TreeGridView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 创建表格和数据
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Columns.Add("ParentID", typeof(int));
table.Rows.Add(1, "Root", 0);
table.Rows.Add(2, "Child1", 1);
table.Rows.Add(3, "Child2", 1);
table.Rows.Add(4, "Child3", 2);
table.Rows.Add(5, "Child4", 2);
table.Rows.Add(6, "Child5", 3);
// 将数据绑定到表格控件
treeGridView.DataSource = table;
// 将 ParentID 列隐藏
treeGridView.Columns["ParentID"].Visible = false;
// 设置树形结构
treeGridView.Columns["Name"].DefaultCellStyle.Font = new Font(treeGridView.Font, FontStyle.Bold);
treeGridView.Columns["Name"].DefaultCellStyle.ForeColor = Color.Blue;
treeGridView.Columns["Name"].HeaderText = "Category";
treeGridView.Columns["ID"].HeaderText = "ID";
treeGridView.Columns["Name"].Width = 200;
treeGridView.Columns["ID"].Width = 50;
treeGridView.Columns["Name"].DisplayIndex = 0;
treeGridView.Columns["ID"].DisplayIndex = 1;
treeGridView.Columns["ID"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
treeGridView.Columns["ID"].ReadOnly = true;
treeGridView.Columns["Name"].ReadOnly = true;
treeGridView.Columns["Name"].Frozen = true;
treeGridView.Columns["Name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
// 设置行高
treeGridView.RowTemplate.Height = 30;
}
private void treeGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (treeGridView.Columns[e.ColumnIndex].Name == "Name")
{
int parentID = (int)treeGridView.Rows[e.RowIndex].Cells["ParentID"].Value;
if (parentID == 0)
{
e.CellStyle.BackColor = Color.LightGray;
}
else
{
e.CellStyle.BackColor = Color.White;
}
int level = GetLevel(treeGridView.Rows[e.RowIndex]);
e.CellStyle.Padding = new Padding(level * 20, 0, 0, 0);
}
}
private int GetLevel(DataGridViewRow row)
{
int level = 0;
while (row.Cells["ParentID"].Value != DBNull.Value && (int)row.Cells["ParentID"].Value != 0)
{
level++;
int parentID = (int)row.Cells["ParentID"].Value;
row = treeGridView.Rows.Cast<DataGridViewRow>().First(r => (int)r.Cells["ID"].Value == parentID);
}
return level;
}
}
}
```
这个树形表格包含 ID、Name 和 ParentID 三列,其中 ParentID 表示该行的父节点 ID。在代码中,我们将 ParentID 列隐藏,然后通过修改 Name 列的样式来实现树形结构。在 `CellFormatting` 事件中,我们设置了 Name 列的背景色、缩进和字体样式,从而实现树形结构。在 `GetLevel` 方法中,我们计算了每一行的层级,以便于设置缩进。