我想用枚举类型中的参数做来datagridview表的列名。希望列名用中文显示在枚举描述上中文。能过循环的方式生成表,同时还生成一个同样的datatable表。datatable作为datagridview的数据源。
希望在定义枚举类型时就设置某些列为不显示,可以在枚举类型中添加一个标记,然后在生成列的过程中根据这个标记来决定是否显示列。这样可以使方法更加通用,方便统一管理需要隐藏的列。
public enum MyEnum
{
[Description("学生姓名")]
StudentName,
[Description("学生年龄")]
StudentAge,
[Description("学生性别"), HiddenColumn]
StudentGender
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 创建 DataGridView
DataGridView dataGridView = new DataGridView();
Controls.Add(dataGridView);
// 创建 DataTable
DataTable dataTable = new DataTable();
// 根据枚举类型生成 DataGridView 列和 DataTable 结构
foreach (MyEnum value in Enum.GetValues(typeof(MyEnum)))
{
// 获取枚举值的描述
FieldInfo field = value.GetType().GetField(value.ToString());
DescriptionAttribute attribute = (DescriptionAttribute)field.GetCustomAttribute(typeof(DescriptionAttribute));
string columnDisplayName = attribute.Description;
// 为 DataTable 添加列
dataTable.Columns.Add(value.ToString());
// 检查是否含有 HiddenColumn 标记,若有则不显示该列
if (!Attribute.IsDefined(field, typeof(HiddenColumn)))
{
// 为 DataGridView 添加列
dataGridView.Columns.Add(value.ToString(), columnDisplayName);
}
}
// 将 DataTable 设置为 DataGridView 的数据源
dataGridView.DataSource = dataTable;
}
}