La définition de DataGridView.DefaultCellStyle.NullValue sur null au moment de la conception génère une erreur lors de l'ajout de lignes au moment de l'exécution

StackOverflow https://stackoverflow.com/questions/48271

  •  09-06-2019
  •  | 
  •  

Question

Dans Visual Studio 2008

  • ajouter un nouveau DataGridView à un formulaire
  • Modifier les colonnes
  • Ajouter un nouveau DataGridViewImageColumn
  • Ouvrez le CellStyle Builder de cette colonne (propriété DefaultCellStyle)
  • Changez la NullValue de System.Drawing.Bitmap en null
  • Essayez d'ajouter une nouvelle ligne à DataGridView à l'exécution (DataGridView1.Rows.add ();)
  • Vous obtenez cette erreur :System.FormatException :La valeur formatée de la cellule a un mauvais type.

Si vous redéfinissez NullValue sur System.Drawing.Bitmap (comme c'était le cas), vous obtenez toujours la même erreur lors de l'ajout d'une ligne.

Si vous définissez NullValue au moment de l'exécution au lieu de la conception, vous n'obtenez aucune erreur.(dataGridView1.Columns[0].DefaultCellStyle.NullValue = null ;)

Pourriez-vous me dire pourquoi ?

Était-ce utile?

La solution

Cela pourrait bien être un bug du concepteur ;si vous jetez un œil au fichier .designer.cs (peut-être en faisant une différence avant et après avoir défini NullValue sur null), vous devriez pouvoir voir le code qu'il génère.

Autres conseils

Kronoz a raison.Après l'avoir défini au moment de la conception, il ajoute ceci au .designer.cs :

dataGridViewCellStyle1.NullValue = "null" ;

Si je modifie "nul" à nul alors ça marche bien.J'ai vérifié DataGridViewCellStyle.NullValue set_NullValue(Object) et get_NullValue avec réflecteur et je pense qu'une valeur de chaîne ne devrait générer aucune erreur ici.

Quoi qu'il en soit, soyez prudent avec cela et si vous souhaitez le définir au moment du design, n'oubliez pas de modifier le .design.cs.

Changez la NullValue de System.Drawing.Bitmap en null

Lorsque vous entrez « null » dans le champ NullValue du concepteur, vous spécifiez la valeur de chaîne « null ».La seule façon de définir NullValue sur une valeur autre qu'une chaîne est de la définir par programme ou en modifiant vous-même le code du concepteur.

La case à cocher ne peut pas avoir de valeur de chaîne.Ne définissez aucune valeur par défaut dans la boîte de dialogue des propriétés de l'EDI.J'avais écrit "Empty" dans la propriété RowsDefaultCellStyle.Format et cela a provoqué l'erreur.C’était auto-infligé.En guise de correctif, j'essayais de désactiver l'état de la case à cocher, mais j'avais juste besoin de supprimer la valeur de la chaîne.

J'ai trouvé qu'il était préférable de supprimer simplement l'élément du concepteur de la zone Format et de la zone de valeur nulle par défaut.Ensuite, il le ramène à la valeur réelle nulle.Je vais essayer de le définir dans la section init loin de la merde générée par le concepteur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top