thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008
-
18 mars 2007 à 11:58
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008
-
21 mars 2007 à 16:29
Bonjour,
J'ai encore besoin de votre. J'ai regardé les Webcasts de Mistu sur le databinding avancé et j'ai essayé de faire un peu la même chose.
J'ai un formulaire frmListeArticle avec un datagridview binder sur une collection d'objet.
J'ai un bouton qui permet d'accéder au détail de l'objet (frmEditArticle).
Le code sur l'événement click de mon bouton :
frmEditArticle.EditArticle((ArticleEntity)articleEntityBindingSource.Current); ==> appel de la fonction frmEditArticle en passant l'élément courant
Le code dans ma frmEditArticle :
public static void EditArticle(ArticleEntity article)
{
using (frmEditArticle formArticle = new frmEditArticle())
{
formArticle.articleEntityBindingSource.DataSource = article;
formArticle.StartPosition = FormStartPosition.CenterParent;
formArticle.ShowDialog();
}
}
Je ne sais pas comment faire pour annuler mes modifs lorsque l'utilisateur clique sur le bouton annuler.
j'ai essayé articleEntityBindingSource.CancelEdit mais ça ne fonctionne pas et mes modifs sont toujours visibles sur mon DataGridView lorsque je quitte la form frmEditArticle.
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 21 mars 2007 à 16:29
Bonjour,
J'ai finalement trouvé, je donne la solution pour ceux que ça interesse...
Toutes classes (binder) qui autorisent des modifiations de données et donc une validation ou une annulation doivent implémenter IEditableObject.
Mon bindingSource va invoquer BeginEdit sur l'objet éditable dès que cet objet devient l'objet courant. Dans ma classe, cela signifie que mon objet autorise la modification de ses données et que toutes ces modifications peuvent être annulées lors d'un appel de CanceEdit, si EndEdit n'a pas été appelé au préalable pour commiter les modifications.
Après chaque appel de CanceEdit ou EndEdit, le bindingSource invoque à nouveau BeginEdit
Concrètement cela signifie qua ma classe doit pouvoir stocker temporairement toutes les valeurs d'origines (celles d'avant l'appel de BeginEdit). Donc dans le corps des différentes méthodes BeginEdit, CanceEdit et EndEdit, j'écris mon propre code de stockage temporaire, et de restauration ou de validation définitive des données saisies
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 19 mars 2007 à 11:02
Salut,
Merci pour ta réponse. Je veux bien coder tu me le propose mais qu'est ce que je mets dans le bloc "On invalide le changement" ? Je mets "articleEntityBindingSource.CancelEdit" ? Si oui, j'ai essayé, pas à l'endroit où tu le dis mais dans un bouton qui permet de quitter ma form, et ça n'a pas marché.
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 20 mars 2007 à 15:47
Salut Sebmafate,
J'ai modifié le code comme tu me l'a suggéré. J'ai placé articleEntityBindingSource.CancelEdit dans le bloc d'invalidation mais ça n'a rien changé.
Sais tu ce qu'il faut faire ???