Je suis en train de créer un DataGridView lié à un DataTable où une colonne est une zone de liste déroulante. Le code s'exécute mais j'obtiens l'erreur suivante après la liaison (pas lorsque les données sont liées): System.ArgumentException: la valeur DataGridViewComboBoxCell n'est pas valide.Liaison DataGridView à DataTable avec ComboBox ne fonctionne pas
Dans le DataGridView une des colonnes est un DataGridViewComboBoxColumn qui utilise un ENUM (nommé StructureType) comme il est source:
// ColumnStructure
//
this.ColumnStructure.ValueType = typeof(structureType);
this.ColumnStructure.DataSource = Enum.GetValues(typeof(structureType));
this.ColumnStructure.HeaderText = "Structure";
this.ColumnStructure.Name = "ColumnStructure";
this.ColumnStructure.DataPropertyName = "Structure";
//
Quand je alimenter le DataGridView sans utiliser un DataTable, il fonctionne très bien:
structureType? structure = GetStructure(part);
dgvObjectTypes.Rows.Add(name, type, structure, count);
Maintenant, je voudrais utiliser un DataTable à la place, mais je ne peux pas le faire fonctionner. Le DataTable est créé comme suit:
DataTable table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Type", typeof(string));
table.Columns.Add("Structure", typeof(DataGridViewComboBoxCell));
table.Columns.Add("Count", typeof(int));
D'autres colonnes fonctionnent très bien, mais je ne peux pas obtenir la colonne « Structure » fonctionne. Voici comment j'ai essayé de créer le combobox:
var cb = new DataGridViewComboBoxCell();
cb.ValueType = typeof(structureType);
cb.DataSource = Enum.GetValues(typeof(structureType));
cb.Value = (structureType)structure;
Après que je viens de créer les lignes de la table et et mettre la table en tant que source de données pour le DataGridView:
table.Rows.Add(name, type, cb, count);
dgv.DataSource = table;
J'ai lu beaucoup de messages où il a été déclaré que l'utilisation d'énumérations dans les comboboxes pose des problèmes (par exemple: DataGridView linked to DataTable with Combobox column based on enum), mais cela ne semble pas être le cas ici. J'ai même essayé d'utiliser des tableaux de chaînes explicitement typés mais j'ai toujours la même erreur. Je pense que je fais quelque chose de mal avec le DataGridViewComboBoxCell.
Quel pourrait être le problème?
Merci! J'avais déjà perdu espoir. Autre question: Serait-il un moyen facile de définir l'affichage de la zone de liste déroulante vide si 'structureType?' Serait null? Ce serait cool, mais je pourrais aussi aller avec juste "None" ajouté à l'énumération. – JayByte
L'ajout d'un 'None' serait le plus simple. – Plutonix