[C#.NET] DataGridViewComboBoxColumn, events et valeur de depart ?

DataGridViewComboBoxColumn, events et valeur de depart ? [C#.NET] - C#/.NET managed - Programmation

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
 
 :sweat:


Message édité par ParadoX le 12-09-2006 à 14:16:51

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 08-09-2006 à 13:35:20   

Reply

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 :(


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

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 !


Message édité par ParadoX le 12-09-2006 à 14:14:45

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

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...

Reply

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:
 

  • Une façon d'accéder à une combobox d'une colonne de type DataGridViewComboBoxColumn comme s'il s'agissait d'une combobox normale, isolée
  • Une façon d'updater son contenu (un refresh, quoi)


Ais-je été plus clair ? :)

Message cité 1 fois
Message édité par ParadoX le 12-09-2006 à 18:44:41

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

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 :)

Reply

Marsh Posté le 13-09-2006 à 10:28:49    

Hmpf ok merci qd meme ... qqun d'autre ? :sweat:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

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

Reply

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 :
  1. private void fenetre_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
  2.         {
  3.             ((ComboBox)e.Control).SelectedIndexChanged += new EventHandler(Profile_SelectedIndexChanged);
  4.         }


 
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 :/


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

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 :D

Reply

Marsh Posté le 15-09-2006 à 11:20:45   

Reply

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 :o


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 15-09-2006 à 16:46:42    

Tu cast ton control en combobox et le tour est joué.

Reply

Marsh Posté le 19-09-2006 à 23:35:55    

Le probleme, c'est qu'il n'y a pas de control :/


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

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.

Reply

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 :
  1. // code irrélévant avant
  2. Profile.Items.RemoveAt(position + 1); // Profile est la DataGridViewComboBoxColumn
  3. // code irrélévant ensuite


 
 
C'est a la fin de cette methode que j'aimerais récupérer ma combobox. C'est plus clair ?


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

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...

Reply

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 :
  1. private void fenetre_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
  2.         {
  3.             ((ComboBox)e.Control).SelectedIndexChanged += new EventHandler(Profile_SelectedIndexChanged);
  4.         }


 
La, on peut caster, parce quon recupere un DataGridViewEditingControlShowingEventArgs (sic). Mais dans ma methode, je n'ai pas ca :/


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

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 ?

Reply

Marsh Posté le 22-09-2006 à 12:57:56    

_Mose_ a écrit :

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 ?


 
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 :jap:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

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)

Reply

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 :)


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

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.

Reply

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 :/


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 22-09-2006 à 16:47:27    

Dans quelle méthode appelles-tu ton Items.Add(...) ?

Reply

Marsh 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)  

Reply

Marsh Posté le 25-09-2006 à 09:40:42    

_Mose_ a écrit :

Dans quelle méthode appelles-tu ton Items.Add(...) ?


 

Code :
  1. public void test(string test)
  2. {
  3. Items.Add(string test)
  4. }


 
 [:god]  
 

moi23372 a écrit :

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)


Bah ouais mais je suis pas dans le cas d'un datagridview bindé :/


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 25-09-2006 à 16:45:09    

ParadoX a écrit :

_Mose_ a écrit :

Dans quelle méthode appelles-tu ton Items.Add(...) ?

Code :
  1. public void test(string test)
  2. {
  3. Items.Add(string test)
  4. }


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.

Reply

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 ^^


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 25-09-2006 à 17:32:01    

Ah oki.. je comprend mieux.
 
Et si tu la déselectionnes temporairement ? :)

Reply

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 ^^


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed