cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007
-
29 mars 2007 à 20:51
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 2008
-
2 avril 2007 à 20:57
Je viens de tester un code, j ai pas d erreur mais pas de résultat!
En fait j ai un form découpé en 2 Container découpés en Panel
Sur le container1 Panel 2 j ai un datagridview avec en derniere colonne un checkbox!
et en dessous des textbox!
j aimerai que quand je coche une ligne, les éléments de cette ligne apparaissent dans mes textbox afin de pouvoir modifier si nécessaie les éléments!!!
docn voila mon code~, mais je pense que c est lié aussi à la présence de Panel, j ai du mal à gérer ceux ci!!!
private
void
dataGridView1_CellContentClick(
object
sender,
DataGridViewCellEventArgs
e){
if
(e.RowIndex > -1 && dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[e.ColumnIndex]
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 29 mars 2007 à 22:14
EUh, j aimerai bien mais je sais pas le faire!
et c'est pas ed la volonté qui me manque mais j'ai pas encore appris le débuggage pas à pas... je m autoforme et c'est pas trop ça encore ;-)
J'ai posé un point d arret au niveau du "private void" et apres j ai fais F5 et là ca donne rien, qunad je clique sur F5, ca me lance mon form mais aucune réaction du point d arret quand je coche ou clique sur une cellule du datagridview, meme pas de fleche jaune, rien!!!
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 30 mars 2007 à 08:48
Sisi, tu t'y prends bien.
Tu peux mettre un point d'arret sur plusieurs lignes. A ta place, j'en mettrais un sur le if.
Ensuite lance ton appli normalement avec F5, et fais ce que tu dois faire avec. Si ca ne s'arrete jamais, c'est que ca ne passe pas dans ta méthode.
Une fois ton code sur le point d'arret, tu peux voir l'état de tes variables en passant ton curseur dessus (et d'autres options avec le clic droit). Tu peux aussi changer les valeurs de tes variables pendant le debug. Ensuite, tu peux continuer d'éxecuter ton code ligne par ligne avec la touche F11 (ou F10, cas un peu plus particulier)
Enfin bref, pour en revenir a ce que tu dis, si ca ne s'arrete pas alors que tu as mis un point d'arret au niveau de la définition de ta méthode, alors c'est qu'elle n'est jamais appelée.
Tu t'es bien inscrite à l'evenement CellContentClick ? (et non pas simplement copié/collé la méthode ?)
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 30 mars 2007 à 16:11
Ahoui en effet , t as bien fais de me le demander, à force de supprimer , remettre, l évènement CellContentClick n'était pas inscrit, et pourtant j avais cliqué sur le datagridview pour l 'écrire, mais après je l'avais supprimé pensant ne pas etre ca... bref...
il me dit que mon erreur est que le nom de la colonne "LOGIN" n existe pas! Pour moi "LOGIN" est le headertext, alors j ai remplacé par lOGINDataGridViewTextBoxColumn.HeaderText et j'ai le meme erreur!
Pourtant dans des exemples du net les gens mettent le textHeader
ne faut il pas plutot un integer???
Sabine
Vous n’avez pas trouvé la réponse que vous recherchez ?
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 30 mars 2007 à 16:20
En fait c'est le nom de la colonne que tu dois mettre. Donc dans tont cas "lOGINDataGridViewTextBoxColumn".
Tu peux aussi mettre un entier... Mais gaffe si tu changes l'ordre de tes colonnes par la suite ;)
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 30 mars 2007 à 16:20
C'est bon ca marche, j ai mis le numero de la colonne plutot!!!
par contre je doute sur la logique de mettre à jour des champs!
Voici mon pb:
Quand je coche une ligne, j ai donc maintenant mes infos qui vont dans des textbox!
de là je peux les modifier, et apres je veux cliquer sur un bouton "UPDATE" qui me modifie mes infos dans la base de données et dans le datagrid view!
pour le datagridview j ai pas encore réfléchis mais pour la base de données, je vois bien faire un champ caché qui récupère aussi le login par exmple comme ca je ferai le UPDATE .... WHERE login="ce login caché"!
est ce que ca parait bon???
y a t il plus simple???
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 30 mars 2007 à 16:31
Je peux pas vraiment te dire si c'est bon ou pas, sachant que je ne connais pas ton appli. Mais dans la logique, tu peux tout a fait faire comme ca oui.
Mais, que fais tu si l'utilisateur Check plusieurs lignes ? (sachant, si j'ai bien compris, que tu met dans les textboxs les valeurs de la derniere ligne checkée)
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 30 mars 2007 à 22:44
Ma logique était bonne, mon Update marche bien! cool!
Si l'utilisateur check plusieurs user , alors c'est le dernier coché qui apparait! de toute maniere les textbox servent pour modifier le user, donc se fait en cochant un user à la fois!
par contre quand je coche un user, son nom s affiche dans textbox, puis si je coche un 2ieme user, le nom de celui prend la place du premier! si je viens à déocher le premier, son nom revient alors dans le textbox.... et ça je veux pas, je veux seuleument qu apparaissent dans les textbox les infos d un user seulement coché!!!
J aimerai aussi que si je décoche tout, il n y ait plus rien dans les textbox!!!
Il me faut rajouter dans mon if quelque chose comme:
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].value != null
mais ca ca marche pas!!! ca change rien
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 31 mars 2007 à 09:22
En fait je pense que de devoir cocher une case pour choisir l'utilisateur a modifier n'est pas la bonne idée.
Parce que dans le comportement que tu décris, ton utilisateur peut cocher plusieurs lignes, mais seules les valeurs de la derniere ligne cliquée apparaissent. Ce qui produit le comportement que tu décris : Si l'utilisateur décoche une ligne, les valeurs de cette ligne apparaissent quand meme (evenement CellContentClick). Pour eviter ca, il faudrait que dans ton if tu vérifies si la ligne cliquée est cochée ou décochée.
Mais que se passe-t-il si l'utilisateur coche plusieur lignes, puis decoche la derniere ligne qu'il a coché ? Tu vas mettre quelles valeurs dans tes TextBox ? Celle de l'avant derniere ligne cochée ? (ce qui veut dire que tu vas devoir te rappeler dans l'ordre toutes les lignes qui ont été cochées). Ou aucune valeur ?(ce qui serait illogique, puisque tu auras encore plein de lignes cochées).
Plutot que de devoir cocher une ligne pour pouvoir modifier des valeurs, pourquoi ne pas simplement permettre a ton utilisateur de selectionner la ligne pas un simple clic (tu mets simplement la ligne selectionnée dans une autre couleur). De cette facon, tu n'as plus que zéro ou une seule ligne selectionnée a un instant t. -> Plus logique et facile a comprendre pour ton utilisateur.
Ca ne demande pas beaucoup de modifications dans ton code (tu as juste a t'inscrire a l'evenement CellClick plutot que CellContentClick et mettre en couleur la ligne qui contient la cellule cliquée, le DataGridiew a tout ce qu'il faut pour ca)
Cependant, tes CheckBox sont toujours valables pour la suppression de plusieurs utilisateurs a la fois ;)
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 31 mars 2007 à 09:31
Ou alors, pour que ce soit encore plus clair pour l'utilisateur, tu mets une colonne Bouton (DataGridViewButtonColumn) avec entete "Modifier", et lors du clic sur ce bouton (toujours via l'evenement CellContentClick) tes valeurs s'affichent dans les TextBox.
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 2 avril 2007 à 16:10
Ok, oui tu as raison, ce sera beacoup plus simple à la compréhension!
Je vais donc m attaquer à mettre un datagridviewbuttoncolumn à la place!!!
Merci pour tes indications
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 2 avril 2007 à 16:54
ça y est j'ai une question ;-)
comment fais tu pour mettre un nom sur le bouton du datagriview?
parceque buttonDGV.text="action"; ça marche pas!!!!
et aussi comment fais t on pour que quand je compile et execute le dimensionnement de la fenetre prenne tout l ecran et que je sois pas constament obligée à agrandir la fenetre?
Et aussi je me demandais comment j allais faire pour faire de mon application un site web???
voilà les questions qui me traversent l esprit aujourd hui ;-)
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 2 avril 2007 à 17:55
En fait, tu ne peux pas afficher de libellé directement sur le bouton, il faut mettre le libellé de l'action en entete de la colonne.
Pour le redimensionnement, tu as la propriété WindowState de ta Form, qu'il faut mettre a Maximized.
Par contre... Tu ne peux pas passer ton application Winform en site web ! Le developpement web est différent, meme si le "codebehind" est du C#, ca reste du dev web, et donc de l'ASP.Net .
Tu devais vraiment faire une application web ? Parce qu'a ce moment la il va falloir refaire pas mal de choses :/ (la plupart de tes methodes en C# resteront valables je suppose, mais il va falloir refaire l'interface, remplacer ton DataGridView par un GridView, etc.)
Et pour tout ca, il va surtout falloir poser les questions sur le forum d'aspfr. Ici on traite du C# "general" et developpement Windows.
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 2 avril 2007 à 18:08
Ah super, oui je devais faire un site web mais vu que je m autoforme j en savais rien! et bien heureusement que je et pose la question maintenant!!!lol
SInon j ai trouvé comment mettre le nom sur le bouton : c est la propriété "UseColumnTextForButtonValue" qu il faut mettre à True!!!
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 2 avril 2007 à 19:56
Une dernière petite question avant mon voyage: ;-)
Maintenant que j ai un bouton à la place de mon checkbox je sais pas trop comment dire que je veux supprimer la ligne du bouton oú je clique.
voici mon erreur :
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
voici mon code:
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 2 avril 2007 à 20:05
Salut,
Dans ton parametre DataGridViewCellEventArgs passé avec la fonction, tu as 2 propriétés : ColumnIndex et RowIndex.
Il faut donc que tu remplaces ton if (button.Text == "Delete") par un if qui verifie que :
e.ColumnIndex != -1
et que
tonDataGridView.Columns[e.ColumnIndex].Name == leNomDeTaColonneDelete
Une fois dans le if, tu peux recuperer la ligne cliquée via : tonDataGridView.Rows[e.RowIndex]
Mais je sais pas si tout ceci te servira en developpement web ;)
Hésite pas a revenir ici si jamais tu as quand meme des questions de C# "pur"
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 2 avril 2007 à 20:51
Là je nage complet, je sais pas comment faire!
Je comprends pourquoi ce que j ai déjà fais ne peut pas etre réutilisé!!!
bref en tout cas`je reviendrai poser des petites questions, ça c'est sur... ;-)
a bientot
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 2 avril 2007 à 20:57
Le developpement web est très différent du developpement Windows (code qui s'execute du coté du serveur, gestion de la mémoire et interactions avec l'interface différentes, etc.)
Cependant, tes algorithmes seront les memes, ta méthode d'acces au données sera identique, tu pourra conserver tes requetes (et donc par exemple, tout le code qui se trouve dans ton CellContentClick). Faudra surtout reecrire tout l'interface, adapter certaines choses, ... Mais ca ne fait aucun doute que nos amis d'aspfr sauront bien te guider ;)