MAJ de DataGrid

[Résolu]
Signaler
Messages postés
28
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
19 mars 2008
-
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
-
Bonjour,

Dans mon programme j'utilise deux datagrid en lecture seule pour représentaer une relation maître-détail. Disons dgG (à gauche) en maître et dgD (donc à droite) en détail. La sélection d'une ligne de mon dgG conditionne les données du dgD.


Le MAJ du dgD fonctionne mais j'ai le problème suivant :
Lorsqu'on entre en édition d'une cellule du dgD et que l'on change de ligne sur le dgG, la cellule en édition reste à l'écran...


L'évênement sur lequel la maj se fait est CurrentCellChanged() sur le dgG. La fonction suit le protocole suivant :
1- vider les infos existantes : dataSet.Clear();
2- créer une nouvelle table (dataTable, dataRow et dataColumn
3- remplir la table
4- ajout de la table dans le dataSet
5- dgD.SetDataBinding(dataSet, "ma_table")


Je vois plusieurs possibilités pour résoudre mon problème, et c'est là que j'ai desoin de votre aide :
1- j'ai oublié quelque chose ...
2- ne permettre qu'une sélection de ligne dans mes dg (impossibilité de rentrer dans une cellule). Je n'ai pas trouvé comment.
3- valider les "changements" de la cellule. Je n'ai pas réussi non plus.


Par avance merci.

7 réponses

Messages postés
18
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
16 juin 2005

Salut,
J'ai également eu ce problème pour l'une de mes applications. C'est le fait que le grid soit en lecture seule qui provoque ce problème.
Pour la solution 2 tu peux faire comme ça :
Au changement du CurrentRowIndex tu fais (moi je l'ai fait sur un mouseUp mais ça devrait marcher aussi comme ça)

tonDG.Select(tonDG.CurrentRowIndex);

Normalement il te sélectionne toute la ligne et impossible de rentrer dans une cellule.

Jno

Toutes ces questions sans réponse vont me rendre dingue
Messages postés
28
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
19 mars 2008

Merci,
Je n'ai pas trouvé d'évenement sur CurrentRowIndex pour mon DataGrid.
A la base je n'ai que mon dataGrid et mon dataSet d'existant, le reste est créé dynamiquement.
Et ce n'est pas mon dataGrid mais toutes mes colonnes qui sont en lecture seule...

Mais ton aide m'a mis sur la voie :
Lors de la création je laisse mes colonnes en lecture/écriture mais à la fin je définit le dataGrid en lecture seule (le dgD). L'utilisateur peut encore entrer dans une cellule pour l'éditer, mais comme avant : sans pouvoir modifier la donnée.

Lors du changement de ligne de mon maître (dgG), avant de remplir l'esclave (dgD) avec mes nouvelles données je le place (le dgD) en lecture/ecriture; puis je le remplis et le repasse en lecture seule.

Et la rémanence de la cellule en cours d'édition disparaît

Le système n'est pas parfait mais au moins il n'y a plus de problèmes d'affichage !
Messages postés
28
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
19 mars 2008

Humm,

Maintenant que mon problème est résolu j'aimerai le faire apparaître dans le titre mais je ne trouve pas le moyen de le faire...

Et je me demande également à quoi sert le bouton "Réponse acceptée !".

En tout cas le problème est : Résolu
Messages postés
28
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
19 mars 2008

...
Ca y est c'est compris !
...
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
14
pltuot qu'utiliser le currentrowindex...et des evenement mouse up...


j'utiliserais plutot les Currencymanager... :


private CurrencyManager CM_maitre ;



//Puis :
//Attention il faut initialiser ton currencymanager comme ton datasource et datamember du datagrid
CM_maitre = (CurrencyManager) BindingContext[ds.T_maitre ];





//On affecte le Ds au datagrid


dg_Liste_maitreDataSource = ds.T_maitre ;


//La tu peux faire ca :


CM_maitre .PositionChanged +=
new System.EventHandler(CM_maitre _PositionChanged);






private
void CM_maitre _PositionChanged(
object sender, EventArgs e)


{


//Metrte ici le code qui va remplir ton detail en fonction de la position de ton maitre

}

comme tu peux le voir dans les Currencymanager tu a une propriete position (qui equivaut a peu pres au currentrowindex) mais qui est mieux...en fait admettons que tu a 10 lignes tu fais un filtre sur le datagrid qui ne t'affiche plus que 5 ligne du dataset...
pour supprimer une ligne tu va utiliser le currentrowindex...qui ne correspondra pas forcement a l'enregistrment du dataset...
tu risque donc de supprimer un enregistrement qui n'est pas celui que tu croyais (scene vecu...)
alors qu'avec le currencymanager...NO PROBLEME !!!!


Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
28
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
19 mars 2008

Ok,
Pour le moment je vais garder mon système puisque le CurrentRowIndex me sert à récupérer une valeur de la ligne, qui est une clef d'une hashTable... Mes dataTable ne sont que l'interface de mes hashTable, et mes mises a jour changent l'intégralité des données de mes dataTable.

Je garde ta solution en mémoire en cas de besoin.
@+
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
14
je te le conseil...moi j'ai completement laisser tomber le currentrowindex...je n'utilise pplus que les currencymanager...bien plus propre...a mon gout...
mais les gouts et les couleurs....


Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."