0
votes

DataGridViewComboboxcell Membre de l'affichage ne s'affiche pas

Objectif

Un DataGridView de SteelTypes a une colonne qui a été liée à un DataView ( SteelThicknesses ). Je peux sélectionner les données et la définir correctement. Cependant, je ne peux pas charger les mêmes informations. Mon DataGridView ComboBoxCell contient la valeur et le texte formaté modifié, mais je ne peux pas définir les informations d'affichage des membres.

Problème actuel

J'ai toutes mes colonnes de Textbox charger correctement, à l'exception de la colonne ComboBox. La variable de CBCOL est réglée correctement et l'éditoriévalue et le formatEdValue contiennent la valeur que je veux! Cependant, l'écran d'affichage n'est pas répliqué dans la cellule DataGridViewCombOBOX.

J'essaie d'afficher une "3" dans la colonne Épaiseur (épaisseur) via la réglage de sa valeur à une clé primaire (pk_steelthicknité):

 Entrez la description de l'image ici

Voir les résultats ci-dessous. Tout sauf que mon ComboBoxCell est peuplé: Entrez la description de l'image ici

Appréciez l'aide à l'avance, cela m'a été fou :)


0 commentaires

3 Réponses :


3
votes

Vous ne définissez pas le texte. Vous définissez l'identifiant sous-jacent. L'idée est que vous liez la colonne à une table parent et vous liez la grille à une table enfant qui a une clé étrangère à la table des parents. Vous définissez la valeur de la clé étrangère dans la cellule de la grille et la valeur de texte correspondante de la table des parents est affichée.

Par exemple, disons que vous avez une table xxx

et vous avez une personne personne comme: xxx

dans votre grille, vous créeriez un DataGridViewCombobOncolumn et définissez son DataProperTyname propriété sur "HéresseurId". Lorsque vous avez ensuite lié votre la table de la grille, la colonne HERPHERNESIDSID se lierait à la colonne BOXE BOXE. Vous lieriez votre table de votre sur la colonne et définissez le displaymember et Valeur sur "Nom" et "ID" respectivement. La grille afficherait alors "à gauche", "droite" et "ambidextrous" pour "Peter", "Paul" et "Marie" respectivement. Si vous vouliez fabriquer Peter AmbidexThous, vous définiriez la valeur autoritéd la valeur sur à 3, puis il afficherait "Ambidextrous".

Voir ceci pour Plus d'informations:

Ajout d'une colonne ComboBox à DataGridView < / p>


1 commentaires

Merci pour la réponse. J'avais déjà regardé votre réponse sur VBForums aussi. En fait, j'ai le membre d'affichage et le membre de valeur défini sur DataGridViewCombobOncell. Il a la valeur appropriée qui a été fixée à l'encembre à l'ID correct que j'ai spécifié. Cependant, cela n'affiche pas l'élément d'affichage. Pourtant, dans l'éditateformatvalue, je peux voir que cela montre les bonnes informations à afficher, mais elle n'apparaît pas à l'écran.



3
votes

On dirait que vous faites beaucoup de travail pour vous-même ici. DataGridCombObox peut être utilisé pour décoder une valeur simplement en ayant son

  • DataSource défini sur quelque chose qui fournit la recherche de la clé / valeur, par exemple une boutique en acier de données avec deux colonnes DISP et VAL et dispose de lignes telles que "épaisse", 1 "moyen", 2 "mince", 3 ,
  • Displaymember défini sur une chaîne de nom de colonne à partir de la table de recherche contenant le texte à afficher, par exemple "DISS",
  • Valeur définie sur le nom de la colonne de chaîne de la recherche qui a la valeur qui concerne le texte à afficher, par exemple "Val" et
  • DataProperTyName défini sur le nom de la propriété (colonne) de l'autre table qui a la valeur à décoder (une des valeurs de la colonne VAL de la table de recherche) (par exemple, une table de produits avec une colonne SteerChickemseid) .

    Le DataGridView est lié aux produits DataTable, le combo trouvera par exemple. 3 Dans la colonne STEELTHICKERIDIDIDD, il ressemblera à 3 dans la colonne VAL de la table SteelThicknesses et affichera le texte qu'il trouve dans la colonne DISC de cette ligne à partir de SteelThickesses.Si l'utilisateur modifie la valeur affichée en supprimant la liste déroulante et en sélectionnant l'épaisseur. , il fonctionnera à l'inverse et prendra 1 à partir de la colonne VAL et mettra à jour la table des produits avec la nouvelle valeur 1 pour SteelThicknessID. Si vous ne le souhaitez pas, faites la colonne ou la DataGridView en lecture seule

    Pour une discussion plus impliquée, voir ma réponse à DataGridView Chargement de Linq


0 commentaires

0
votes

Ceci est un comportement étrange, mais j'ai trouvé que modifier mes appels de méthode de chargement du nouveau () à la charge de formulaire () a fait fonctionner ...

J'ai donc changé mon code initial de ceci: xxx

à ceci: xxx

Ceci est le seul code modifié et fonctionnant maintenant.


0 commentaires