DataGridViewComboBoxColumn, events et valeur de depart ? [C#.NET] - C#/.NET managed - Programmation
Marsh Posté le 08-09-2006 à 13:52:23
Autremenent dit, comment recuperer les Events d'une ComboBox issue d'une DataGridViewComboBoxColumn ? un cast de la case en combobox ne fontionne pas
Marsh Posté le 12-09-2006 à 14:13:47
Petit Up car je n'ai pas trouvé toutes mes réponses: 1er post mis à jour !
Marsh Posté le 12-09-2006 à 18:01:59
C hyper flou ton pb. C'est du petit nègre d'utilisateur maladroit, pas un langage de programmeur.
* "Je n'arrive pas à updater le contenu d'une combobox"
- Quand tu fais quoi ? Quand tu chantes devant ton PC ? bah moi non plus, merde....
* Qu'est ce que tu entends par "updater"
- elle va chopper les valeurs où ? elle les invente ?
Bon sinon pour le second problème, tu as trois propriétés "SelectedItem", "SelectedValue" et "SelectedIndex" sur la combo box.Tu devrais trouver ton bonheur...
Marsh Posté le 12-09-2006 à 18:44:13
Tu m'as mal compris. Je ré-explique, de façon plus claire.
J'ai un DataGridView avec une colonne de type DataGridViewComboBoxColumn. Chaque cellule de cette colonne est une ComboBox intégrée au DataGridViewComboBoxColumn. Jusque la, on est d'accord ?
Maintenant, je galere pour accéder à l'objet ComboBox d'une cellule. Pourquoi ? Parce que la combobox est intégrée, et n'a pas de nom propre. Si j'avais une Combobox à part entiere, crée par moi-meme, je ne poserais pas ma question, je sais que je peux y accéder comme ça : maComboBox.uneMéthode()
Mais maintenant, je suis obligé d'y accéder via les cellules de mon datagrdiview, càd comme ça:
monDatagridView.Rows[i].Cells[j].Value
Je peux ajouter des elements à la combobox de cette maniere, par exemple. Mais comme l'objet référencé n'est pas une Combobox, mais une CELLULE de datagridview, les propriétés et events du type "selectedItem" & co n'existent pas. Je ne sais pas comment y accéder, et c'est exactement ma question ici. Et non, on cast du contenu de la cellule en ComboBox ne fonctionne PAS.
Quand je dis "updater", il s'agit de mettre à jour le contenu de la DropDown List d'une combobox.
Exemple concret: Une fonction supprime une valeur de la dropdownList. Mais quand la fonction a fait son boulot, la comboBox selectionnée contient toujours les anciennes valeurs. Pour "updater" son contenu, je suis obligé d'en dérouler une autre (combobox), puis quand je redéroule celle qui n'était pas updatée, elle l'est maintenant. Je recherche donc 2 choses:
Ais-je été plus clair ?
Marsh Posté le 12-09-2006 à 18:53:12
ParadoX a écrit : Ais-je été plus clair ? |
Nettement !
Bonne change, je peux pas t'aider, je hais les colonnes toute faite dans les DataGrid, je rfais tout à la main
Marsh Posté le 13-09-2006 à 10:28:49
Hmpf ok merci qd meme ... qqun d'autre ?
Marsh Posté le 13-09-2006 à 22:15:06
monDatagridView.Rows[i].Cells[j].Controls ça n'existe pas? si ça existe, tu peux caster vers un combo et c'est vachement simple
Marsh Posté le 14-09-2006 à 11:03:39
moi23372 a écrit : monDatagridView.Rows[i].Cells[j].Controls ça n'existe pas? si ça existe, tu peux caster vers un combo et c'est vachement simple |
Non, justement
Pour attrapper l'event "indexChanged", j'ai ca pour le moment:
Code :
|
J'ai trouvé ca sur MSDN...
Je ne comprends pas trop ce qu'est un control, je sais juste qu'ailleurs, dans la methode qui est censée updater le contenu de la liste, je n'ai pas de DataGridViewEditingControlShowingEventArgs que je pourrais caster
Marsh Posté le 15-09-2006 à 11:20:45
"Je ne comprends pas trop ce qu'est un control"
tu te fou de moi j'espère...?
un control est un composant graphique. Control est la class de base pour tous les composants graphiques en .NET.
C'est fou quand même de pas savoir ça et de vouloir programmé en C#. C'est comme dire qu'on ne sait pas ce que c'est Object
Marsh Posté le 15-09-2006 à 12:19:34
Bon, eh bien je sais maintenant ^^ Je savais juste pas que c'était appellé comme ca
Et ca ne résoud pas mon probleme
Marsh Posté le 19-09-2006 à 23:35:55
Le probleme, c'est qu'il n'y a pas de control
Marsh Posté le 20-09-2006 à 12:59:52
Soyons plus précis.
Dans quelle méthode tu veux récupérer ta combobox ?
Et ne répond pas avec des mots, mais avec du code, paske je capte rien à ce que tu veux faire et à quel endroit se trouve ton pb.
Marsh Posté le 20-09-2006 à 13:25:30
Appellons cette methode test(). Elle enleve un element de la dropdownlist de la combobox de la ligne actuelle.
Code :
|
C'est a la fin de cette methode que j'aimerais récupérer ma combobox. C'est plus clair ?
Marsh Posté le 20-09-2006 à 14:03:32
Je ne connais absolument pas les DataGridColumn-magique-avec-combobox, mais vu que perone n'a de pistes pour toi, je vais essayer.
Après un rapide coup d'oeil dans la doc, il y a une propriété Items dans ta colonne, qui contient les items affichés par toutes les ComboBox de ta DataGridView.
T'es sur que c'est possible de n'en modifier qu'une seule ? J'ai un vieux doute...
Marsh Posté le 20-09-2006 à 14:26:20
Le probleme, c'est justement que ces items sont valables pour TOUTES les lignes du DataGridView. Je ne sais pas comment faire afficher une liste différente pour chaque ligne. Mais ce n'est pas trop grave dans mon cas, vu que jai n'ai pas besoin d'avoir des valeurs differentes. Ce dont jai besoin, c'est d'effectuer un refresh ou un update sur la liste déroulante de toutes les cases.
Et la DataGridViewComboBoxColumn n'a pas de methode pareille, alors le seul moyen serait de caster chaque ligne en combobox et d'appeller sa methode update. Mais pour ce faire, il me fait un controle, et ca, je ne sais pas comment le choper.
Si ca peut servir, j'ai ca pour choper le Index changed d'une de ces combobox:
Code :
|
La, on peut caster, parce quon recupere un DataGridViewEditingControlShowingEventArgs (sic). Mais dans ma methode, je n'ai pas ca
Marsh Posté le 22-09-2006 à 12:23:27
Hmm...
Ton DataGridViewComboBoxColumn il a bien une propriété Items ?
http://msdn2.microsoft.com/fr-fr/l [...] items.aspx
Quand tu les change, ça ne convient pas ?
C'est là que tu as le pb du refresh ?
Sinon pour afficher une liste différente, je ne sais pas, j'ai pas l'impression vu ce que je lis dans la doc (mais je suis pas rentré dans le détail).
Sinon vu comme tu te prend la tête, je me demande si une bête colonne avec des ComboBox que tu créé toi-même ça serait pas plus simple ?
Marsh Posté le 22-09-2006 à 12:57:56
_Mose_ a écrit : Hmm... |
Jep, il y a une propriété Items, et c'est exactrement la qu'il y a un probleme de refresh
Je n'ai pas songé a faire autrement, vu qu'un datagridview proposer une DataGridViewComboBoxColumn ^^
Ca serait plus chiant qu'autre chose de tout changer
merci qd meme pour ton aide
Marsh Posté le 22-09-2006 à 14:15:50
ParadoX a écrit : Jep, il y a une propriété Items, et c'est exactrement la qu'il y a un probleme de refresh |
Oki, donc pour résumer, ta question c'est :
"pourquoi quand je modifie la collection Items d'une DataGridViewComboBoxColumn, les éléments contenus dans mes combobox ne sont pas mises à jour immédiatement ?"
(dsl, j'aime bien la précision, le français c'est tellement ambigu)
Marsh Posté le 22-09-2006 à 14:53:56
Jep c'est ca, avec la précision suivante : la liste n'est pas updatée quand elle est selectionnée au moment de la mise à jour. Il faut donc en selectionner une autre, puis la reselectionner pour la voir updatée
Marsh Posté le 22-09-2006 à 14:57:07
Dans quelle méthode tu modifies la collection Items ?
Ca me parait bizarre ton problème quand même.
Marsh Posté le 22-09-2006 à 15:19:14
Je fais juste un items.add() ^^
Maintenant je cherche un Items.refresh(), mais je ne trouve pas
Marsh Posté le 22-09-2006 à 16:47:27
ReplyMarsh Posté le 24-09-2006 à 20:21:03
en fait, le problème pourrait être résolu très facilement si la grille était liée à un bindingSource.
il suffirait de faire (.NET 2.0 uniquement)
monBindingSource.RefreshCurrentItem();
mais sinon je suis certain qu'il doit y avoir une méthode de refresh ou d'update dans la grille. Quitte à forcer toi même la combo à prendre une valeur (AFTERROWACTIVATE)
Marsh Posté le 25-09-2006 à 09:40:42
_Mose_ a écrit : Dans quelle méthode appelles-tu ton Items.Add(...) ? |
Code :
|
moi23372 a écrit : en fait, le problème pourrait être résolu très facilement si la grille était liée à un bindingSource. |
Bah ouais mais je suis pas dans le cas d'un datagridview bindé
Marsh Posté le 25-09-2006 à 16:45:09
ParadoX a écrit :
|
Naaaaaaaan... tu le fais exprès ?
C'est moi qui m'exprime mal ?
Je recommence :
QU'EST CE qui déclenche l'appelle à cette méthode ?
Le click sur un bouton ?
Le load de ta page ?
quoi ? quand ? comment ?
On est dans une interface graphique, donc on parle de programmation évènementielle.
Quel évènement doit déclencher cet update ?
Oui c'est important. Si la modification de la collection Items ne provoque pas la mise à jour des ComboBox, c'est que tu dois appeler ton code à un endroit à la con où c'est pas top.
Marsh Posté le 25-09-2006 à 17:06:59
Je peux te copier coller le code, mais c'est parce que la ligne actuelle est selectionnée qu'elle ne se mets pas à jour. Toutes les autres se mettent à jour. On s'est mal compris, je crois ^^
Marsh Posté le 25-09-2006 à 17:32:01
Ah oki.. je comprend mieux.
Et si tu la déselectionnes temporairement ?
Marsh Posté le 25-09-2006 à 18:18:19
C'est justement l'aspect "bricolage" qui je gene
C'est pourquoi j'ai demandé si qqun connassait une autre facon plus propre ^^
Marsh Posté le 08-09-2006 à 13:35:20
Bonjour,
J'ai un dataGridView et je n'arrive pas à updater le contenu d'une combobox d'une DataGridViewComboBoxColumn (enfin son contenu ...) Par contre, si après les changements, je déroule une autre combobox de la meme colonne, puis re celle d'avant, celle d'avant sera updatée. J'aimerais faire ca automatiquement lors d'un event.
Par ailleurs, j'aimerais mettre une "valeur de départ" a cette combo box, une valeur qui serait selectionnée en position 0, sans avoir à dérouler le menu et choisir la 1ere cellule
Message édité par ParadoX le 12-09-2006 à 14:16:51
---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt