Contrôle datagridex pour synchronisation avec la base de données

Soyez le premier à donner votre avis sur cette source.

Vue 10 077 fois - Téléchargée 1 502 fois

Description

Pour une application récente je me suis vraiment compliqué la vie, avec une réussite mitigée, pour assurer la synchronisation entre un DataGrid et la base de données reliée sans que l'utilisateur soit obligé de procéder à une action spécifique. En effet je trouve peu ergonomique d'ajouter une action de validation de la part de l'utilisateur qui ne comprend pas très bien à quoi elle correspond.

Ma première idée, mauvaise, a été d'utliser les événements des DataTable. Bien compliqué pour un résultat horrible étant donné que des événements manquent (pas d'événement spécifique pour l'ajout d'un enregistrement).

J'ai posé la question sur plusieurs forums sans enthousiasmer les foules. Alors j'ai reconsidéré le problème et j'ai trouvé la solution simple... Je suis passé tout simplement par l'événement CurrentCellChanged du DataGrid et alors là tout se passe comme sur des roulettes. Etant donné ma galère je propose ce source tout simple mais qui peut éviter à d'autres mes errements.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
20
Date d'inscription
jeudi 9 octobre 2008
Statut
Membre
Dernière intervention
2 octobre 2009

slt
j 'ai vu ton projet et en essayant de le compiler une page nommé <> est apparu ça fait un bon moment que j'essais de faire une page comme celle-ci mais vainement.Si c'est possible je voudrais bien que tu me dise comment tu l'as fait
merci d'avance
Messages postés
132
Date d'inscription
samedi 25 mai 2002
Statut
Membre
Dernière intervention
31 août 2007

Oui j'ai oublié de mettre à jour mon source ici :) mais avec le FrameWork 2.0 tout ça ne se justifie plus vraiment... Mais je n'ai pas encore fait d'essais...
Messages postés
1
Date d'inscription
jeudi 20 avril 2006
Statut
Membre
Dernière intervention
27 avril 2006

Merci pour ce code mais j'ai juste constaté un petit bug :

Quand tu supprimes la premiere ligne, tu ne changes pas de ligne donc les données ne sont pas mises à jour.
Messages postés
132
Date d'inscription
samedi 25 mai 2002
Statut
Membre
Dernière intervention
31 août 2007

Merci pour tes infos Karlo mais il y a quand même un problème qui m'a beaucoup ennuyé. Lors d'un ajout d'enregistrement la ligne nouvelle est bien marquée "Added" mais n'est pas encore attachée au DataTable, ce qui fait qu'un DataAdapter ne le voit pas. Et c'est là que les problèmes commencent...
En fait il manque l'événement RowAdded qui se déclencherait effectivement lors de l'ajout de la ligne au niveau du DataTable. Alors que RowChanged intervient trop tôt.
D'autre part passer par les événements du DataGrid est tout de même plus simple à coder non ? De toutes façons par le dataTable ça me paraît très foireux...

@+
Messages postés
133
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
27 février 2005
5
Salut bestmomo,
apres un bref yeutage sur la msdn, la classe datatable implemente bien tous les evenements dont tu as besoin :

* RowChanged : Se produit lorsque DataRow a été correctement modifié.
* RowChanging : Se produit lorsque DataRow est en cours de modification.
[...]

dans ces evts les proprietes :
* Action - Obtient l'action qui s'est produite sur DataRow.
* Row - Obtient la ligne sur laquelle une action s'est produite.

La propriete Action (type DataRowAction)est une enumeration
* Add : La ligne a été ajoutée à la table.
* Change : La ligne a été modifiée.
* Commit Les modifications de la ligne ont été validées.
* Delete : La ligne a été supprimée de la table.
* Nothing : La ligne n'a pas été modifiée.
* Rollback

Ca devrait t'aider.
@+
k@rlo
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.