What else I have to do in order to show ReadAccess
enum members in this DatagridViewComboBox?
ReadDataGridViewComboBoxColumn.Items.Clear();
ReadDataGridViewComboBoxColumn.Items.AddRange(ReadAccess.None, ReadAccess.Allowed);
ReadDataGridViewComboBoxColumn.ValueType = typeof(ReadAccess);
here is designer-generated codes about 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;
and finally, in after InitializeComponent();
, i'm setting DataGridView's DataSource:
this.rolesDataGridView.DataSource = this.RoleTablePermissions; // a bindingsource list
This is a problem i've come across many times. The DataGridViewComboBoxColumn
doesn't know how to reconcile the difference between the enum's string representation and its integral value. Even though you set ValueType
to the type of the enum, the DataGridView
will try to set the cell's value to the underlying int
value - this is why a FormatException
will be raised during databinding.
The only way i've found to overcome this problem (short of subclassing the cell type) is to bind the DataGridViewComboBoxColumn
to a data source which separates the string values from the integer values. You can use an anonymous type for this purpose:
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();
This way, the DataGridView
knows how to relate the cell value with its formatted value.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With