Bonjour à tous,
J'ai plusieurs petits problèmes avec mon programme que je n'arrive pas du tout à résoudre malgré tout mes efforts. Je pense que ces problèmes sont fortement liés entre eux.
Donc voilà, J'utilise une DataTable pour stocker des taches, (chaque ligne représentant une tache). Je fait un 1er calcul sur ces taches dés qu'une valeur change dans l’évènement ColumnChanged pour calculer par exemple si la tache est en retard ou terminé....etc. Ensuite je fait un 2eme calcul pour comptabiliser le nombre de tache terminé. (J'ai un contrôle CheckBoxTERMINE Bindé directement avec la table). Le mieux est que je vous montre le bout de code suivant :
Problème 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Private Sub TableTachesColumnChanged(sender As System.Object, e As System.Data.DataColumnChangeEventArgs) Dim ColonneName As String = e.Column.ColumnName Dim ValeurProposed As Object = e.ProposedValue Call CalculLaLigne(e.Row, "ColumnChanged", ColonneName, ValeurProposed) BindingSourceTaches.EndEdit() Call CalculLeNombreDeTacheTerminé End Sub Private Sub CalculLaLigne(ByVal Row As DataRow, ByVal EventSource As String, Optional ByVal ColonneName As String = Nothing, Optional ByVal ValeurProposed As Object = Nothing) ' Cette procédure fait une lecture de la valeur Proposed ainsi que toutes les valeurs des autres colonnes. Elle peut retourner des résultats dans le DataRow ou décider de faire une annulation avec CancelEdit ...... If CalculDoitêtreAnnulé = True then Row.CancelEdit End Sub Private Sub Call CalculLeNombreDeTacheTerminé Dim Table As DataTable = dtTableTaches Dim expression As String Dim sortOrder As String Dim foundrows() As DataRow expression = TableTaches.TERMINE & "='True'" sortOrder = TableTaches.ID_TACHE & " ASC" foundrows = Table.Select(expression, sortOrder) NbTachesTerminé = foundrows.Count End Sub
Hypothése de calcul initial : j'ai 3 taches Terminé sur 4 taches au total.
Avec la ligne BindingSourceTaches.EndEdit() présente dans le code :
-> Je décoche le Statut Terminé, j'obtiens NbTachesTerminé = 2. Ensuite si j'éxecute le code BindingSourceTaches.Current ("TERMINE") = True , j'obtiens NbTachesTerminé = 2
Sans la ligne BindingSourceTaches.EndEdit() présente dans le code : (Toujours en partant de l'état initial)
-> je décoche le Statut Terminé, j'obtiens NbTacheTerminé = 3
Problème 2 et 3 :
Hypothèse de calcul : MaProcédure CalculLaLigne doit décider d'invalider la modification TERMINE = True en exécutant CancelEdit.
Donc je coche Terminé=True, CancelEdit s’exécute bien , les données dans la table on bien été annulé (TERMINE=False) mais mon contrôle (CheckBoxTERMINE) n'est pas rafraîchi malgré le Binding. Il se comporte comme si il gardait le Statut True, résultat : quand je change de ligne du DataGridView la procédure CalculLaLigne s'exécute à nouveau.
J'aimerais que la procédure ne s'exécute qu'une seul fois (Problème 2).
J'aimerais aussi que mon contrôle soit raffraichi après l’annulation (problème 3).
Pour le probléme 3 : J'ai essayé BindingSourceTaches.CurrencyManager.Refresh() dans l’évènement LostFocus du CheckBoxTERMINE mais c'est pas très propre. (cela modifie la sélection de la cellule sur le DataGridView, j'aimerais plutôt agir sur le Binding du contrôle ChekBoxTERMINE (pour autant que cela soit la solution) mais je ne sais pas faire.
Voilà, ca fait beaucoup d'un coup mais comme je disais je pense que tout les problèmes sont liées et ça fait trés longtemps que je tourne autour de ces problèmes sans trouver de solution.
J'ai peu d'espoir d'arriver à trouver une solution qui règle tout (il faudrait que vous puissiez reproduire mon code ce qui n'est pas simple vu la taille du programme, sinon je suis prêt à donner mon programme source si quelqu'un veux bien regarder) C'est l'unique et dernier problème dans mon programme que j'ai gardé pour la fin voyant que je n'y arrivais pas et j'espère vraiment que vous pourrez m'aider.
Partager