gpt4 book ai didi

c# - 如何在 DataGridViewComboBox 中显示 Enum 类型的成员?

转载 作者:可可西里 更新时间:2023-11-01 08:33:03 24 4
gpt4 key购买 nike

为了在此 DatagridViewComboBox 中显示 ReadAccess 枚举成员,我还需要做什么?

ReadDataGridViewComboBoxColumn.Items.Clear();
ReadDataGridViewComboBoxColumn.Items.AddRange(ReadAccess.None, ReadAccess.Allowed);
ReadDataGridViewComboBoxColumn.ValueType = typeof(ReadAccess);

这里是设计者生成的关于 DataGridView 的代码:

this.rolesDataGridView.AutoGenerateColumns = false;
this.rolesDataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.TableNameDataGridViewTextBoxColumn,
this.ReadDataGridViewComboBoxColumn,
this.WriteDataGridViewComboBoxColumn,
this.ReadCodeDataGridViewComboBoxColumn,
this.ProcessDataGridViewCheckBoxColumn,
this.AdministrateDataGridViewCheckBoxColumn});
this.rolesDataGridView.DataSource = this.bsTablePermissions;

最后,在 InitializeComponent(); 之后,我正在设置 DataGridView 的数据源:

this.rolesDataGridView.DataSource = this.RoleTablePermissions;  // a bindingsource list

最佳答案

这是我遇到过很多次的问题。 DataGridViewComboBoxColumn 不知道如何协调枚举的字符串表示及其整数值之间的差异。即使您将 ValueType 设置为枚举类型,DataGridView 也会尝试将单元格的值设置为基础 int 值 - 这是为什么在数据绑定(bind)期间会引发 FormatException

我发现解决此问题(除了对单元格类型进行子类化)的唯一方法是将 DataGridViewComboBoxColumn 绑定(bind)到将字符串值与整数值分开的数据源。您可以为此目的使用匿名类型:

ReadDataGridViewComboBoxColumn.ValueType = typeof(ReadAccess);
ReadDataGridViewComboBoxColumn.ValueMember = "Value";
ReadDataGridViewComboBoxColumn.DisplayMember = "Display";
ReadDataGridViewComboBoxColumn.DataSource = new ReadAccess[]
{ ReadAccess.None, ReadAccess.Allowed }
.Select(value => new { Display=value.ToString(), Value=(int)value })
.ToList();

这样,DataGridView 就知道如何将单元格值与其格式化值相关联。

关于c# - 如何在 DataGridViewComboBox 中显示 Enum 类型的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4120838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com