当前位置: 首页 > 编程语言 > C#

如何在DataGridViewComboBox中显示枚举类型成员?分享

时间:2023-04-10 22:20:36 C#

DataGridViewComboBox中如何显示枚举类型成员?为了在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(newSystem.Windows.Forms.DataGridViewColumn[]{this.TableNameDataGridViewTextBoxColumn,this.ReadDataGridViewComboBoxColumn,this.WriteDataGridViewComboBoxColumn,this.ReadCodeDataGridViewComboBoxColumn,this.ProcessDataGridViewCheckBoxColumn,this.AdministrateDataGridViewCheckBoxColumn});这个.rolesDataGridView。DataSource=this.bsTablePermissions;最后,在InitializeComponent();中,我设置了DataGridView的数据源:this.rolesDataGridView.DataSource=this.RoleTablePermissions;//abindingsourcelist这是我遇到过很多次的问题。DataGridViewComboBoxColumn不知道如何协调枚举的字符串表示与其整数值之间的差异。即使您将ValueType设置为枚举类型,DataGridView也会尝试将单元格的值设置为基础int值-这就是在数据绑定期间抛出FormatException的原因。我发现克服此问题(无需子类化单元格类型)的唯一方法是将DataGridViewComboBoxColumn绑定到将字符串值与整数值分开的数据源。您可以使用匿名类型来实现此目的:ReadDataGridViewComboBoxColumn.ValueType=typeof(ReadAccess);ReadDataGridViewComboBoxColumn.ValueMember="值";ReadDataGridViewComboBoxColumn.DisplayMember="显示";ReadDataGridViewComboBoxColumn.DataSource=newReadAccess[]{ReadAccess.None,ReadAccess.允许}.Select(value=>new{Display=value.ToString(),Value=(int)value}).ToList();这样,DataGridView就知道如何将单元格值与其格式化值相关联。添加到BradlySmith提供的答案:使用此代码轻松获取所有枚举值(而不是单独命名每个值):ReadDataGridViewComboBoxColumn.DataSource=newList((ReadAccess[])Enum.GetValues(typeof(ReadAccess))).Select(value=>new{Display=value.ToString(),Value=(int)value}).ToList();您不应该将枚举值转换为int。如果您收到类似“无效值”的错误,请使用此代码:ReadDataGridViewComboBoxColumn.DataSource=newReadAccess[]{ReadAccess.None,ReadAccess.Allowed}.Select(value=>new{Display=value.ToString(),Value=值}).ToList();已接受答案的改进:无需手动将枚举成员键入为数组。相反,您可以使用System.Enum.GetValues(typeof(ReadAccess))。此外,您可以使用字典列表(不接受字典作为数据源)而不是匿名类型列表:ReadDataGridViewComboBoxColumn.DataSource=System.Enum.GetValues(typeof(ReadAccess)).Cast.ToDictionary((e)=>e.ToString(),(e)=>e).ToList;或直接KeyValuePair列表:ReadDataGridViewComboBoxColumn.DataSource=System.Enum.GetValues(typeof(ReadAccess)).Cast.Select((value)=>newKeyValuePair(value.ToString(),(value)));还是有必要的(不过DisplayMember现在是“Key”):以上是C#学习教程:如何在DataGridViewComboBox中显示枚举类型的成员?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——ReadDataGridViewComboBoxColumn.ValueType=typeof(ReadAccess);ReadDataGridViewComboBoxColumn.ValueMember="值";ReadDataGridViewComboBoxColumn.DisplayMember="Key";本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: